如何从jsonObject获取相同数组的数据到具有android的列表

时间:2016-12-12 19:45:32

标签: android json expandable

我创建了一个网页,通过php创建json,现在我想通过android从json获取数据,但是我想将具有相同id的数组放到列表中,最后我将它放到hashmap中,以便每个对象都可以生成expandableListview,我的意思是:

Array
(
    [0] => Array
        (
            [id] => 1
            [author] => x
            [book] => y
        )

[1] => Array
    (
        [id] => 2
        [author] => w
        [book] => a
    )

[2] => Array
    (
        [id] => 1
        [author] => x
        [book] => y2
    )

[3] => Array
    (
        [id] => 1
        [author] => x
        [book] => y3
    )

)

并且json结果是:

{"authors":[{"id":"1","author":"x","book":"y"},`{"id":"2","author":"w","book":"a"},{"id":"1","author":"x","book":"y2"},{"id":"1","author":"x","book":"y3"}]}`

和我在android中的代码从json获取数据:

public static HashMap<String,List<String>> toPerson(String json){

    try {
        JSONObject jsonPerson = new JSONObject(json);
        JSONArray jsonDataAuthor = jsonPerson.getJSONArray("authors");
        HashMap<String ,List<String>> author=new HashMap<String ,List<String>>();

        for(int i=0; i<jsonDataAuthor.length(); i++){
            List<String> bookOfAuthor=new ArrayList<String>();
            JSONObject jsonPn = jsonDataAuthor.getJSONObject(i);
            String authorName = jsonPn.getString("author");
            String bookName = jsonPn.getString("book");
            bookOfAuthor.add(bookName);
            author.put(authorName,bookOfAuthor);
        }
        return author;
    } catch (JSONException e) {
        e.printStackTrace();
        return null;
    }
}

但是我得到了可扩展的列表视图,其中有父母,每个父母只有一个孩子,但是这里有一个相同的id,我想要一个可扩展的列表视图,其中有两个父母,其中一个有3个孩子,但我不知道怎么样,我想要下面的结果:

x

  • ý

  • Y2

  • Y3

w

  • 一个

我很乐意帮助我。

1 个答案:

答案 0 :(得分:0)

您正在每次迭代中创建一个新列表:

List<String> bookOfAuthor=new ArrayList<String>();

将其移至for循环外部。如果您的HashMap包含ArrayList给定ID,请携带并将bookName添加到列表中。否则,您将在每次迭代中继续创建新的ArrayList,并且您将不会有超过1项。

这样的事情。我可能有语法错误,我只是把它们放在一起给你一个想法:

try {
    JSONObject jsonPerson = new JSONObject(json);
    JSONArray jsonDataAuthor = jsonPerson.getJSONArray("authors");
    HashMap<String ,List<String>> author=new HashMap<String ,List<String>>();
    List<String> bookOfAuthor;

    for(int i=0; i<jsonDataAuthor.length(); i++){

        JSONObject jsonPn = jsonDataAuthor.getJSONObject(i);
        String authorName = jsonPn.getString("author");
        String bookName = jsonPn.getString("book");

        if (author.contains(authorName)){
            bookOfAuthor = author.get(authorName);
        } else {
            bookOfAuthor = new ArrayList<>();     
        }

        bookOfAuthor.add(bookName);
        author.put(authorName,bookOfAuthor);
    }
    return author;
} catch (JSONException e) {
    e.printStackTrace();
    return null;
}