将json字符串转换为随机数个json对象中的对象

Converting json string to object inside random number of JSON objects

本文关键字:对象 json 字符串 转换 随机数      更新时间:2023-09-26

我遇到了一个问题,如何为随机数量的对象更改json对象中的json字符串。让我用我的代码和注释来进一步解释这一点。

我有一个工厂,它提供json对象

//Factory for products
app.factory('productsFactory', ['$http', '$location', function($http, $location){
    var factory = {};
    factory.getlatestProductsList = function(n){
        return $http.get($location.protocol() + '://' + $location.host() + '/server/api/products/latest/'+n);
    }
    return factory;
}]);

这个工厂返回一些随机数目的对象

0: Object
active: "1"
alias: "baumbach-circle"
date_c: "2016-01-06 08:09:54"
date_u: null
description: "Corrupti fugit iste quo sunt quidem voluptatibus dolorem. Eos velit architecto veritatis doloribus. Corporis sequi cupiditate possimus voluptates ut consequatur. Accusantium libero qui est sunt et."
id_category: "46"
id_product: "25"
id_user: "177"
images: "[{"thumbImage":"http:'/'/lorempixel.com'/250'/150'/?63763","image":"http:'/'/lorempixel.com'/1024'/768'/?52630","position":0},{"thumbImage":"http:'/'/lorempixel.com'/250'/150'/?99795","image":"http:'/'/lorempixel.com'/1024'/768'/?84669","position":1},{"thumbImage":"http:'/'/lorempixel.com'/250'/150'/?17506","image":"http:'/'/lorempixel.com'/1024'/768'/?88926","position":2},{"thumbImage":"http:'/'/lorempixel.com'/250'/150'/?73869","image":"http:'/'/lorempixel.com'/1024'/768'/?91917","position":3},{"thumbImage":"http:'/'/lorempixel.com'/250'/150'/?70019","image":"http:'/'/lorempixel.com'/1024'/768'/?18509","position":4}]"
name: "Baumbach Circle"
__proto__: Object
1: Object
active: "1"
alias: "elta-road"
date_c: "2016-01-06 08:09:53"
date_u: null
description: "Culpa perferendis dolores rerum deleniti vero cumque. Similique explicabo beatae est quo sit nisi. Et a voluptatem nihil in. Voluptates modi qui est ducimus corrupti."
id_category: "46"
id_product: "24"
id_user: "73"
images: "[{"thumbImage":"http:'/'/lorempixel.com'/250'/150'/?53746","image":"http:'/'/lorempixel.com'/1024'/768'/?49502","position":0},{"thumbImage":"http:'/'/lorempixel.com'/250'/150'/?75052","image":"http:'/'/lorempixel.com'/1024'/768'/?77727","position":1},{"thumbImage":"http:'/'/lorempixel.com'/250'/150'/?32463","image":"http:'/'/lorempixel.com'/1024'/768'/?76121","position":2},{"thumbImage":"http:'/'/lorempixel.com'/250'/150'/?61377","image":"http:'/'/lorempixel.com'/1024'/768'/?89434","position":3},{"thumbImage":"http:'/'/lorempixel.com'/250'/150'/?86873","image":"http:'/'/lorempixel.com'/1024'/768'/?82513","position":4}]"
name: "Elta Road"
__proto__: Object

问题是图像json是字符串格式的,所以我必须使用json.parse(至少我这么认为,因为我是新手)将它们转换为json

我的问题是:有没有一些简单的好方法可以将所有图像数据解析为json,或者我必须用forEach来做这件事?如果有,代码会是什么样子。我不想在工厂内实现这种效果,所以我不必在调用这个工厂的每个控制器中重复代码。

如果你需要任何额外的信息,请让我知道,我会提供。提前谢谢。

在返回之前,您可以编辑$http返回的答案

app.factory('productsFactory', ['$http', '$location', function($http, $location){
    var factory = {};
    factory.getlatestProductsList = function(n){
        var url = $location.protocol() + '://' + $location.host() + '/server/api/products/latest/'+n;
        return $http({
            method: 'GET',
            url: url
        }).then(function successCallback(response) {
            // you can edit the response her, and parse it
            return response ;
        }, function errorCallback(response) {
        });
    }
    return factory;
}]); 

您可以使用$http返回promise的事实,然后在返回promise之前对数据进行一些处理。这对你有用吗?让我知道你是否需要在ES5

factory.getlatestProductsList = function(n){
    return $http.get($location.protocol() + '://' + $location.host() + '/server/api/products/latest/'+n)
    .then(data => data.map(elem => {
       var tmp = Json.parse(elem.images);
       elem.images = tmp
       return elem;
    }));

在es5 中

factory.getlatestProductsList = function(n){
    return $http.get($location.protocol() + '://' + $location.host() + '/server/api/products/latest/'+n)
    .then(function(data) {
       return data.map(function(elem) {
         var tmp = Json.parse(elem.images);
         elem.images = tmp
         return elem;
       });
    });

如果有人想看看它看起来像,就粘贴代码

//Factory for products
app.factory('productsFactory', ['$http', '$location', function($http, $location){
    var factory = {};
    factory.getlatestProductsList = function(n){
        var url = $location.protocol() + '://' + $location.host() + '/server/api/products/latest/'+n;
        return $http({
            method: 'GET',
            url: url
        }).then(function successCallback(response) {
            var pros = response.data;
            pros.forEach(function(item){
                var pictures = JSON.parse(item.images);
                delete item.images;
                item.images = pictures;
            })
            return pros;
        },function errorCallback(response) {
            console.log('error fetching latest products: ' + response);
        });
    }
    return factory;
}]);