gpt4 book ai didi

java - 如何在 java 中解析复杂的嵌套 jsonarray 树

转载 作者:行者123 更新时间:2023-11-30 06:41:50 26 4
gpt4 key购买 nike

我有一个像这样的 JSON 数组:

[{
"name": "com",
"children": [
{
"name": "project",
"children": [
{
"name": "server"
},
{
"name": "client",
"children": [
{
"name": "util"
}
]
}
]
}
]
}]

我需要所有 JSON 对象的所有名称。有什么办法可以用 Java 完成吗?

我想要一个递归函数。

我的预期结果是这样的:

[
{name:"com"},
{"name":"project"},
{"name":"server"},
{"name":"client"},
{"name":"util"}]

最佳答案

这是一个简单的递归函数,用于从您的 json 数组中获取所有 names 属性:

public static Collection<String> getAllNames(JSONArray jsonArray, List<String> names) {
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject object = jsonArray.getJSONObject(i);
names.add(object.getString("name"));
if (object.has("children")) {
JSONArray children = object.getJSONArray("children");
getAllNames(children, names);
}
}

return names;
}

这将为您提供可用于构造新 json 数组的名称列表。一种可能的方式是这样的:

 public static JSONArray getJsonArraysOfNames(List<String> names) {
JSONArray jsonArray = new JSONArray();
for (String name : names) {
JSONObject object = new JSONObject();
object.put("name", name);
jsonArray.put(object);
}

return jsonArray;
}

更新

如果您更喜欢一体化解决方案,那么您可以采用这种方法:

public static JSONArray getNames(JSONArray inputArray, JSONArray outputArray) {
for (int i = 0; i < inputArray.length(); i++) {
JSONObject inputObject = inputArray.getJSONObject(i);

JSONObject outputObject = new JSONObject();
outputObject.put("name", inputObject.getString("name"));
outputArray.put(outputObject);

if (inputObject.has("children")) {
JSONArray children = inputObject.getJSONArray("children");
getNames(children, outputArray);
}
}

return outputArray;
}

关于java - 如何在 java 中解析复杂的嵌套 jsonarray 树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54628687/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com