迭代JSON对象

时间:2016-11-02 16:08:11

标签: javascript html angularjs arrays json

我想迭代一个json对象transactionByFop

HTML

<div ng-show="searhController.orderCAT.results.length" ng-repeat="(key,obj) in searhController.orderCAT.results track by $index">
            <dl style="border: 1px;"  ng-repeat="(keySub, resp) in obj">
                <dt>{{keySub}}</dt>
                <dd>{{resp}}</dd>
            </dl>
            </div>

JSON

[{
"lastUpdate": "2015-04-06 12:19:20.902",
"orderId": "83642465",
"idFop": 1,
"transactionByFop": {
    "idTransactionByFop": 1523280,
    "Binnacle": {
        "tbkIdTransaction": 8333514670,
        "ackType": "ACK",
        "tbkOrderBuy": 1523280,
        "tbkCodeCommerce": 123123,
        "tbkTypeTransaction": "TR_NORMAL",
        "tbkResponse": -1,
        "tbkAmount": 3.7298E7,
        "tbkCodeAuthorization": 0,
        "tbkFinalNumberCard": "213123",
        "tbkAccountantDate": "0406",
        "tbkTransactionDate": "0406",
        "tbkTransactionHour": "121830",
        "tbkIdSession": 1523280,
        "tbkTypePayment": "VN",
        "tbkNumberFee": 0
    }
},
"isLast": true}]

1 个答案:

答案 0 :(得分:1)

您想要展平您的嵌套对象。您可以执行以下操作(基于this thread的答案)。

创建一个“展平对象

的函数”
$scope.flattenResults = function(data) {
  var result = {};

  function recurse(cur, prop) {
    if (Object(cur) !== cur) {
      result[prop] = cur;
    } else if (Array.isArray(cur)) {
      for (var i = 0, l = cur.length; i < l; i++)
        recurse(cur[i], prop + "[" + i + "]");
      if (l == 0)
        result[prop] = [];
    } else {
      var isEmpty = true;
      for (var p in cur) {
        isEmpty = false;
        recurse(cur[p], prop ? prop + "." + p : p);
      }
      if (isEmpty && prop)
        result[prop] = {};
    }
  }
  recurse(data, "");
  return result;
};

在ng-repeat

中使用它
<dl style="border: 1px;" ng-repeat="(keySub, resp) in flattenResults(obj)">

见下面的工作示例 -

&#13;
&#13;
var searchapp = angular.module('searchapp', [])
  .controller('searchController', function($scope) {
    $scope.results = [{
      "lastUpdate": "2015-04-06 12:19:20.902",
      "orderId": "83642465",
      "idFop": 1,
      "transactionByFop": {
        "idTransactionByFop": 1523280,
        "Binnacle": {
          "tbkIdTransaction": 8333514670,
          "ackType": "ACK",
          "tbkOrderBuy": 1523280,
          "tbkCodeCommerce": 123123,
          "tbkTypeTransaction": "TR_NORMAL",
          "tbkResponse": -1,
          "tbkAmount": 3.7298E7,
          "tbkCodeAuthorization": 0,
          "tbkFinalNumberCard": "213123",
          "tbkAccountantDate": "0406",
          "tbkTransactionDate": "0406",
          "tbkTransactionHour": "121830",
          "tbkIdSession": 1523280,
          "tbkTypePayment": "VN",
          "tbkNumberFee": 0
        }
      },
      "isLast": true
    }];

    $scope.flattenResults = function(data) {
      var result = {};

      function recurse(cur, prop) {
        if (Object(cur) !== cur) {
          result[prop] = cur;
        } else if (Array.isArray(cur)) {
          for (var i = 0, l = cur.length; i < l; i++)
            recurse(cur[i], prop + "[" + i + "]");
          if (l == 0)
            result[prop] = [];
        } else {
          var isEmpty = true;
          for (var p in cur) {
            isEmpty = false;
            recurse(cur[p], prop ? prop + "." + p : p);
          }
          if (isEmpty && prop)
            result[prop] = {};
        }
      }
      recurse(data, "");
      return result;
    };
  });
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="searchapp" ng-controller="searchController">
  <div ng-show="results.length" ng-repeat="(key,obj) in results track by $index">
    <dl style="border: 1px;" ng-repeat="(keySub, resp) in flattenResults(obj)">
      <dt>{{keySub}}</dt>
      <dd>{{resp}}</dd>
    </dl>
  </div>
</div>
&#13;
&#13;
&#13;