},
{
"$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]; //使用全局变量
这里的代码是跟上面一起的。