angular4在复杂的json文件中获取到准确的json对象

[
  {
    "$class": "org.hzl.system.AddParticipant",
    "resources": [
      {
        "$class": "org.acme.trading.TestChainPart",
        "partId": "0002",
        "organName": "wholesaler",
        "asns": [
          "resource:org.acme.trading.TestAsn#string"
        ],
        "orders": [
          "resource:org.acme.trading.TestOrder#string"
        ]
      }
    ],
    "registryType": "Participant",
    "registryId": "org.acme.trading.TestChainPart",
    "transactionId": "2e4ddf55-9f52-4d18-85d4-6afc2a8f86d9",
    "timestamp": "2017-09-10T15:45:59.154Z"
  },
  {
    "$class": "org.acme.trading.TestAsnShipAuto",
    "receiver": "resource:org.acme.trading.TestChainPart#0002",
    "asn": {
      "$class": "org.acme.trading.TestAsn",
      "asnId": "0001",
      "comAsnId": "string",
      "containers": [
        {
          "$class": "org.acme.trading.TestContainer",
          "containerId": "0001",
          "prodItems": [
            {
              "$class": "org.sinclair.trading.TestComProdItem",
              "prodItemBarcode": "0001",
              "orderId": "string",
              "prodName": "cookie",
              "prodCode": "string",
              "description": "string"
            }
          ]
        }
      ],
      "customerName": "string",
      "customerCode": "string"
    },
    "sender": "resource:org.acme.trading.TestChainPart#0001",
    "comTransType": "string",
    "comTransId": "string",
    "timestamp": "2017-09-10T15:44:47.194Z"

  },

 {
    "$class": "org.hzl.system.AddParticipant",
    "resources": [
      {
        "$class": "org.acme.trading.TestChainPart",
        "partId": "0002",
        "organName": "wholesaler",
        "asns": [
          "resource:org.acme.trading.TestAsn#string"
        ],
        "orders": [
          "resource:org.acme.trading.TestOrder#string"
        ]
      }
    ],
    "registryType": "Participant",
    "registryId": "org.acme.trading.TestChainPart",
    "transactionId": "2e4ddf55-9f52-4d18-85d4-6afc2a8f86d9",
    "timestamp": "2017-09-10T15:45:59.154Z"
  },
  {
    "$class": "org.acme.trading.TestAsnShipAuto",
    "receiver": "resource:org.acme.trading.TestChainPart#0002",
    "asn": {
      "$class": "org.acme.trading.TestAsn",
      "asnId": "0002",
      "comAsnId": "string",
      "containers": [
        {
          "$class": "org.acme.trading.TestContainer",
          "containerId": "0002",
          "prodItems": [
            {
              "$class": "org.sinclair.trading.TestComProdItem",
              "prodItemBarcode": "0002",
              "orderId": "string",
              "prodName": "cookie",
              "prodCode": "string",
              "description": "string"
            }
          ]
        }
      ],
      "customerName": "string",
      "customerCode": "string"
    },
    "sender": "resource:org.acme.trading.TestChainPart#0001",
    "comTransType": "string",
    "comTransId": "string",
    "timestamp": "2017-09-10T15:44:47.194Z"

  },

{...//跟上面的代码差不多,就不写出来了}

]

       假设上面的json文件有三个大的json对象。

       问题一:如何获取最里面的json对象,比如获得prodItems这个对象。

       方法:对于这个问题,我找到的方法就是一层层往里面遍历,第一次遍历获得的是三大json对象,将其存放到临时变量temp0中,第二次指定遍历asn对象,将其存放到临时变量temp1中,第三次指定遍历containers对象,将其存放到临时变量temp2中,第四次指定遍历prodItems对象,将其存放到临时的变量temp3中,这时如果直接使用获取prodItems里面的数据得到的是undefined,还需要第五步,遍历temp3,将遍历到的对象的数组的第一个对象保存到temp4中,为什么这个还要这么做的原因是因为上面的json文件在浏览器显示的样子是这样的:

                                                         

每个对象的里面浏览器都会生成_proto_:Object,所以要获取prodItems里面的数据还得经过先获取prodItems这个对象里面的第一个对象。下面是我的代码:

             //局部变量

             let temp0 = [];  
             let temp1 = [];  
            let temp2 = [];
            let temp3 = [];
            let temp4 = [];
            this.allAssets.forEach(asset => {
                          if("org.acme.trading.TestAsnShipAuto" == asset.$class){   
                            temp0.push(asset);      
                    }
              });
              temp0.forEach(asset =>{
                       temp1.push(asset.asn);
             });
             temp1.forEach(asset =>{
                       temp2.push(asset.containers);
             });
              temp2.forEach(asset =>{
                      temp3.push(asset[0].prodItems);//这里为什么要加[0]就是我上面讲的原因,如果不信可以自己尝试一下
             });
             temp3.forEach(asset =>{
                     temp4.push(asset[0]);
             });

         问题二:我们的json文件中有大三json对象,当我循环遍历到我想要的内部json对象时,我怎么准确的获取到相应的json对象的其他信息?清楚点就是假设我们把三大对象依次设为json1、json2、json3,当我拿到了json1中的prodItemBarcode是0001,那我如何正确显示json1对象中的其他信息,比如显示containerId为0001,而不是json2对象中的containerId:0002信息。

        解决方法:当我们遍历到最里面的prodItems对象时,这时prodItems有三个对象,我们选择第二个对象,我们要让这个对象跟最外面的对象也就是json2对象挂钩,可以使用脚标的方式来标识当前选中的时哪个对象,再把这个脚标赋值给全局变量,然后在最外面的那个json对象数组中使用这个全局变量就可以准确匹配到了。代码如下:

       //全局变量:

       private index;

       private TransDetail

      // 局部变量

       let temp5 = [];

        temp4.forEach((asset,index) =>{      //这里的index是使用了json的属性index,可以查看json的api
       if(this.Barcode.barcode == asset.prodItemBarcode){
        temp5.push(asset);
        console.log(index);
         this.index = index;        //将脚标赋值给全局变量
      }
    });

      this.TransDetail = temp0[this.index];     //使用全局变量

这里的代码是跟上面一起的。
























































































猜你喜欢

转载自blog.csdn.net/weixin_37504041/article/details/78002999