我有以下代码正在运行,但它似乎超重的目的。是否有更短的方法来实现循环嵌套json的目标?
我在lambda上运行它并从s3
加载json myFile.json
{
"jsonIsOk":
[
{
"txt_in": "aaa",
"txt_out": "111"
},
{
"txt_in": "bbb",
"txt_out": "222"
},
{
"txt_in": "ccc",
"txt_out": "333"
}
]
}
lambda node.js
var isJsnOk = "jsonIsOk";
var s3 = new AWS.S3({httpOptions: { timeout: 2000 }});
var params = {
Bucket: 'myBucket',
Key: 'myFile.json',
};
s3.getObject(params, function (err, data) {
if (err) {
console.log(err, err.stack);
} else {
var loadJson = data.Body.toString();
var jsnAry = JSON.parse(loadJson);
if (jsnAry.hasOwnProperty(isJsnOk)) {
for (var key_01 in jsnAry) {
if (jsnAry.hasOwnProperty(key_01)) {
for (var key_02 in jsnAry[key_01]) {
console.log('key_02=' + key_02);
if (jsnAry[key_01].hasOwnProperty(key_02)) {
for (var key_03 in jsnAry[key_01][key_02]) {
console.log('key_03=' + key_03 + ': val_03 =' + jsnAry[key_01][key_02][key_03]);
}
}
console.log("-------");
}
}
}
} else {
console.log("error: json is not ok!");
}
}
}
输出
key_02=0
key_03=txt_in: val_03 =aaa
key_03=txt_out: val_03 =111
-------
key_02=1
key_03=txt_in: val_03 =bbb
key_03=txt_out: val_03 =222
-------
key_02=2
key_03=txt_in: val_03 =ccc
key_03=txt_out: val_03 =333
-------
答案 0 :(得分:0)
阵列上有一些原型可用于以功能方式编写嵌套循环并减少总代码行(也更容易读取imo)。这不会在你的例子中逐字地产生输出,因为我不确定键值的含义是什么(没有键,它是一个数组,它有索引)但希望它能给你一些想法如何更好地编写迭代它的代码
{
"jsonIsOk":
[
{
"txt_in": "aaa",
"txt_out": "111"
},
{
"txt_in": "bbb",
"txt_out": "222"
},
{
"txt_in": "ccc",
"txt_out": "333"
}
]
}
obj.jsonIsOk.forEach(a => console.log("txt_in: " + a.txt_in + " txt_out: " + a.txt_out));
// prints
txt_in: aaa txt_out: 111
txt_in: bbb txt_out: 222
txt_in: ccc txt_out: 333
您可能还会发现map
原型很有用,它的工作方式与此类似,只是它返回一个新的集合,其中包含从传递给它的函数返回的结果(我在这里使用lambda语法,你可以只需使用vanilla js传递一个匿名函数。)
答案 1 :(得分:0)
你基本上使用相同的代码循环三次,这可以很容易地递归:
[PKPaymentButton buttonWithType:...
然后这样开始:
function iterate(obj,i=1){
Object.keys(obj).forEach(function(key){
console.log(" ".repeat(i-1)+"key_0"+i+"="+key);
if(typeof obj[key] === "object"){
iterate(obj[key],i+1);
}else{
console.log(" ".repeat(i-1)+"value0"+i+"="+obj[key]);
}
});
}
http://jsbin.com/zedoluwega/edit?console
我还添加了一些空格以使结构更清晰......