2

我有一个 JSONObjects(org.json.JSONObject) 的 JSONArray(org.json.JSONArray) 像

[
    {"id":"abc", "parent_id":""},
    {"id":"def", "parent_id":"abc"},
    {"id":"ghi", "parent_id":""},
    {"id":"jkl", "parent_id":"abc"},
    {"id":"mno", "parent_id":"ghi"},
    {"id":"mno", "parent_id":"def"},
]

这里“id”字段代表对象的唯一id,“parent_id”代表它的父对象的id。我必须将此 JSONArray 转换为另一个 JSONArray,在其中我可以将元素嵌套在其父级(类似结构的目录)中,例如

[
    {"id":"abc", "parent_id":"","children":[
        {"id":"def", "parent_id":"abc","children":[
            {"id":"mno", "parent_id":"def","children":[]}
        ]},
        {"id":"jkl", "parent_id":"abc","children":[]}
    ]},
    {"id":"ghi", "parent_id":"","children":[
        {"id":"mno", "parent_id":"ghi","children":[]}
    ]},
]

任何人都可以在这里帮助我,最好的方法是什么?

4

1 回答 1

2

你会有这样的东西(伪代码)

// Element is { id, children }
Dictionary<String, Element> elements;

for (JSONObject obj : arr) {
    if (elements.hasKey(obj.id)) {
        // Maybe you need to update your element or something here
    } else {
        // Create your element
        elements[obj.id] = new Element(obj.id);
    }

    // if the parent does not exist, create a shadow of the parent
    // (it'll get filled in with more info above if encountered later)
    if (!elements.hasKey(obj.parent)) {
        elements[obj.parent] = new Element(obj.parent);
    }

    // Add yourself to children
    elements[obj.parent].children.push(elements[obj.id]);
}

// TODO: iterate your dictionary and put it into an array, this should be straightforward
// Or if you want the root of your tree return elements[""]

我提前道歉,因为没有更具体,但这应该适用于你想做的任何事情。它也不是 Java,但很容易转换。

于 2013-03-12T14:26:27.427 回答