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 に答える