如何在angularjs中格式化json?

时间:2016-07-05 15:33:04

标签: javascript angularjs json

我有这个Json。我想在AngularJs中使用,但我需要先修改它。我尝试使用foreach并重新排序对象,但最终结果并不好。

$scope.data = [
    {
        id: 1,
        company: "MOVISTAR",
        option: "PRECIO"
    },
    {
        id: 2,
        company: "MOVISTAR",
        option: "CALIDAD"
    },
    {
        id: 3,
        company: "MOVISTAR",
        option: "TECNOLOGIA"
    },
    {
        id: 4,
        company: "CLARO",       
        option: "PRECIO"
    },
    {
        id: 5,
        company: "CLARO",       
        option: "CALIDAD"
    };

我需要这样的格式

$scope.datax = [

        {
            empresa: "MOVISTAR",
            description:[{
                id: 1,
                opcionResp: "PRECIO"
                },
                {
                id: 2,
                opcionResp: "CALIDAD"
                },
                {
                id: 3,
                opcionResp: "TECNOLOGIA"
                }]
        },
        {
            empresa: "CLARO",
            description:[{
                id: 4,
                opcionResp: "PRECIO"
                },
                {
                id: 5,
                opcionResp: "CALIDAD"
                }]
        }];

我对json和angular没有多少经验。请帮帮我。

非常感谢

3 个答案:

答案 0 :(得分:2)

格式化json 可以通过调用

来完成
angular.toJson(myObject)

要将$scope.data转换为所需的结构,您可以迭代$scope.data并构建一个新对象,如下所示:

在线演示 - https://plnkr.co/edit/TFW38xWKhMxmTdf11vbQ?p=preview

function fixData(data) {

    var cache = {};
    var results = [];

    data.forEach(function(item) {
      var values = cache[item.company];

      if (!values) {
        values = [];

        results.push({
          empresa: item.company,
          description: values
        });

      }

      cache[item.company] = values;

      values.push({
        id: item.id,
        opcionResp: item.option
      })

    });

    return results;
}    

参见在线演示 - https://plnkr.co/edit/TFW38xWKhMxmTdf11vbQ?p=preview

答案 1 :(得分:1)

使用forEach非常简单:

var cache = {};

$scope.data.forEach(function(o){
  (cache[o.company] = (cache[o.company] || [])).push({id:o.id, opcionResp:o.option}) 
})

$scope.datax = Object.keys(cache).map(function(key){
    return {empresa:key,description:cache[key]}
})

答案 2 :(得分:0)

首先查找所有不同的公司,然后查看每个公司的原始数据并加载您的描述数组:

        $scope.datax = []

        for (var i in $scope.data) {
            if (distinct.indexOf($scope.data[i].company) == -1) {
                $scope.datax.push({
                    empresa: $scope.data[i].company,
                    description: []
                })
            }
        }

        for (var j in $scope.datax) {
            for (var k in $scope.data) {
                if ($scope.datax[j].empresa == $scope.data[k].company) {
                    $scope.datax[j].description.push({
                        id: $scope.data[k].id,
                        opcionResp: $scope.data[k].option
                    })
                }
            }
        }