3

假设我有一个这样的 JSON 数组:

[
    {
        "id": "429d30a1-9364-4d9a-92e0-a17e00b3afba",
        "children": [],
        "parentid": "",
        "name": "Expo Demo"
    }, 
    {
        "id": "f80f1034-9110-4349-93d8-a17e00c9c317",
        "children": 
            [
                {
                    "id":"b60f2c1d-368b-42c4-b0b2-a1850073e1fe", 
                    "children":[], 
                    "parentid":"f80f1034-9110-4349-93d8-a17e00c9c317", 
                    "name":"Tank"
                }
            ],
        "parentid": "",
        "name": "Fishtank"
    }, 
    {
        "id": "fc8b0697-9406-4bf0-b79c-a185007380b8",
        "children": [
            {
                "id":"5ac52894-4cb6-46c2-a05a-a18500739193", 
                "children":[
                    {
                        "id": "facb264c-0577-4627-94a1-a1850073c270",
                        "children":[
                            {
                                "id":"720472b5-189e-47f1-97a5-a18500a1b7e9", 
                                "children":[], 
                                "parentid":"facb264c-0577-4627-94a1-a1850073c270", 
                                "name":"ubSubSub"
                            }],
                        "parentid": "5ac52894-4cb6-46c2-a05a-a18500739193",
                        "name": "Sub-Sub1"
                    }], 
                "parentid":"fc8b0697-9406-4bf0-b79c-a185007380b8", "name":"Sub"
            },
            {
                "id":"4d024610-a39b-49ce-8581-a18500739a75", 
                "children":[], 
                "parentid":"fc8b0697-9406-4bf0-b79c-a185007380b8", 
                "name":"Sub2"
            }
        ],
        "parentid": "",
        "name": "Herman"
    }, 
    {
        "id": "a5b140c9-9987-4e6d-a883-a18c00726883",
        "children": [
            {
                "id":"fe103303-fd5e-4cd6-81a0-a18c00733737", 
                "children":[], 
                "parentid":"a5b140c9-9987-4e6d-a883-a18c00726883", 
                "name":"Contains Spaces"
            }],
        "parentid": "",
        "name": "Kiosk"
    }
]

不,我想根据 id 找到某个对象,一旦有了,我需要它的孩子和所有孩子的孩子

所以假设我想找到一个 id为 4d024610-a39b-49ce-8581-a18500739a75 的元素

那应该找到元素Sub2

现在它应该产生所有的子元素 id 女巫将是:

facb264c-0577-4627-94a1-a1850073c270
720472b5-189e-47f1-97a5-a18500a1b7e9

假设我会做

findElementsChildren("4d024610-a39b-49ce-8581-a18500739a75")

所以我猜它有两个部分,首先找到“父”元素。然后找到它的childrends childrends children等等。

任何帮助将非常感激!

4

2 回答 2

3

您可以使用递归来解决无限嵌套的问题。使用 Gson,它将类​​似于以下代码片段(未经测试)。其他库也将提供 JsonElement 结构。

private JsonElement findElementsChildren(JsonElement element, String id) {
    if(element.isJsonObject()) {
        JsonObject jsonObject = element.getAsJsonObject();
        if(id.equals(jsonObject.get("id").getAsString())) {
            return jsonObject.get("children");
        } else {
            return findElementsChildren(element.get("children").getAsJsonArray(), id);
        }
    } else if(element.isJsonArray()) {
        JsonArray jsonArray = element.getAsJsonArray();
        for (JsonElement childElement : jsonArray) {
            JsonElement result = findElementsChildren(childElement, id);
            if(result != null) {
                return result;
            }
        }
    }

    return null;
}
于 2013-03-27T12:16:40.220 回答
0

根据 Stefan Jansen 的回答,我做了一些更改,这就是我现在所拥有的:

nestedChildren 全局声明,在搜索子项之前重置为 new ArrayList()

private void findAllChild(JSONArray array) throws JSONException {

    for ( int i=0;i<array.length();i++ ) {
        JSONObject json = array.getJSONObject(i);
        JSONArray json_array = new JSONArray(json.getString("children"));
        nestedChildren.add(json.getString("id"));
        if ( json_array.length() > 0 ) {
            findAllChild(json_array);
        }
    }
}

这假设它是所有数组,在我的情况下是

于 2013-03-27T12:43:44.783 回答