从 JSON 获取元素集合

Get collection of elements from JSON

提问人:blekione 提问时间:2/10/2018 最后编辑:blekione 更新时间:2/8/2022 访问量:2902

问:

我有一个JSON文件,其结构如下:

{"root" : {
     "parent" : {
          "childA" : 
              ["element1",
               "element2"],
          "childB" :
              ["element1",
               "element2"]
     }
}

我怎样才能从中获得一系列孩子?[childA, childB]

现在我正在做什么:

  1. 将 JSON 文件解析为对象(我知道该怎么做,建议的响应是关于这个的)。

  2. 创建集合:

    var collection = [JSON.root.parent.childA, JSON.root.parent.childB];
    collection.forEach(function(child) {
        print(child[0])
    });
    

打印 ."element1"

我是 JavaScript 的新手,但我相信有一种更好、更通用的方法来实现第 2 点。

编辑: 我忘了补充一点,这个 Java 脚本是在 Nashorn jjs 脚本中使用的。

JavaScript JSON 纳斯霍恩 JJS

评论

0赞 clinomaniac 2/10/2018
安全地将 JSON 字符串转换为对象的可能重复项
0赞 Daniel Beck 2/10/2018
Object.keys(JSON.root.parent).
3赞 Teemu 2/10/2018
不要使用“JSON”作为变量名称,否则可能会覆盖或隐藏本机对象。window.JSON
0赞 Scott Sauyet 2/10/2018
var collection = Object.values(JSON.root.parent)
0赞 blekione 2/12/2018
@clinomaniac - 建议的主题是关于解析 JSON 字符串。我的问题不是关于解析JSON,而是如何从JSON对象中提取特定元素。

答:

1赞 Ankit Agarwal 2/10/2018 #1

只需用于此:Object.keys()

var data = {"root" : {
     "parent" : {
          "childA" : 
              ["element1",
               "element2"],
          "childB" :
              ["element1",
               "element2"]
     }
   }
};
var collection = [];
for (var childIndex in data.root.parent){
  data.root.parent[childIndex].every(child => collection.push(child));
};
console.log(collection);

评论

0赞 blekione 2/10/2018
这仅返回键,因此我没有输出console.log(child[0]childAelement1
0赞 blekione 2/10/2018
这对我有用......有点。我喜欢@Musa回答更多,但它在 jjs 脚本中不起作用。
0赞 Don't Panic 4/13/2022
"只需使用 Object.keys() 即可“ ... ?
1赞 Musa 2/10/2018 #2

可用于获取父对象中的条目。Object.values

var data = {"root" : {
     "parent" : {
          "childA" : 
              ["element1",
               "element2"],
          "childB" :
              ["element1",
               "element2"]
     }
   }
};


var collection = []; 
for (var o in data.root.parent){
    collection.push(data.root.parent[o]);
}
collection.forEach(function(child) {
    console.log(child[0]);
});

评论

0赞 blekione 2/10/2018
我忘了补充一点,这段代码是作为 jjs Nashorn 脚本运行的,由于某些原因它不能识别为有效函数,但您的代码实际上是我想要实现的。Object.values
0赞 Himalaya Garg 2/8/2022 #3

您也可以尝试使用 JToken -

 using Newtonsoft.Json.Linq;    

 JToken.Parse(response.Content)
.SelectTokens("root.parent");