2016-07-05 160 views
1

我有這個Json。我想在AngularJs中使用,但我需要先修改它。我嘗試使用foreach和重新排序對象,但最終結果不夠好。如何在angularjs中格式化json?

$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和角度很多經驗。請幫幫我。

非常感謝

+2

在潛入Angular之前,您可能需要花時間學習JavaScript。以下是關於如何遍歷數組https://egghead.io/lessons/javascript-the-array-foreach-method的視頻。您需要使用它來構建您的「格式化」對象 – rob

+0

我想不出任何可以通過它來轉換JSON格式。但是你爲什麼要把它轉換成其他格式呢? Angular可以很容易地使用你的格式。你不需要「修改」它。 –

+0

嗨@someonenew。我試圖做出這個例子:http://plnkr.co/edit/D33ZECyE2dGOc6nynsQT?p=preview。這是因爲我需要格式化Json的原因。 – capitanjack

回答

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

+0

感謝隊友@jossefharush。這是我需要 – capitanjack

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 
        }) 
       } 
      } 
     } 
+0

謝謝@DavidH。我喜歡你的代碼 – capitanjack

+0

總是一種樂趣@capitanjack –

1

It's用很簡單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]} 
})