试图在Android中解析JSON

时间:2015-07-30 11:07:53

标签: java android arrays json jsonobject

您如何建议我解析这个JSON:

{"17": {"user_name": "test1"}, "18": {"user_name": "test5"}, "19": {"user_name": "test9"}}

我需要获得“用户名”,但我无法找到方法。也许我应该将JSON改为类似的东西:

[{"user_name": "test1"},{"user_name": "test5"},{"user_name": "test9"}]

这样我试图获得“user_name”s:

try {
        List<String> allNames = new ArrayList<String>();
        String str = "[{"user_name": "test1"},{"user_name": "test5"},{"user_name": "test9"}]";
        JSONObject json = new JSONObject(str);

            for ( int i = 0; i < json.length() ; i++)
            {
                JSONObject actor = json.getJSONObject(i);
                String user_name = actor.getString("user_name");
                allNames.add(user_name);
            }

} catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

但是后来我遇到问题:

JSONObject actor = json.getJSONObject(i);

Android studio告诉我JSONObject不能应用于int(i)。我不知道为什么它不起作用。

有人可以给我一些提示,教程或示例吗?

非常感谢!

6 个答案:

答案 0 :(得分:0)

  

Android studio告诉我JSONObject不能应用于int(i)

因为JSONObject.getJSONObject方法将键名称设为String而不是int。发布的json中的密钥为17,18,...,以访问内部JSONObject

要从JSONObject获取所有user_name,需要获取所有密钥:

Iterator<String> iter = json.keys();
while (iter.hasNext()) {
   String key = iter.next();
   JSONObject actor = json.getJSONObject(key);
   String user_name = actor.getString("user_name");
   allNames.add(user_name);
}

答案 1 :(得分:0)

方法JSONObject.getJSONObject需要String参数(对象的名称或键),而不是int。在您的情况下,密钥为"17""18""19"。要获取所有密钥,请使用JSONObject.keys()方法:

JSONObject json = new JSONObject(str);
Iterator<String> keyIterator = json.keys();
while (keyIterator.hasNext()) {
  JSONObject actor = json.getJSONObject(keyIterator.next());
  String user_name = actor.getString("user_name");
  allNames.add(user_name);
}

答案 2 :(得分:0)

像这样更改你的代码

try {
    List<String> allNames = new ArrayList<String>();
    String str = "[{"user_name": "test1"},{"user_name": "test5"},{"user_name": "test9"}]";

    JSONOArray jsonArray = new JSONOArray(str);

        for ( int i = 0; i < jsonArray .length() ; i++)
        {
            JSONObject actor = jsonArray.getJSONObject(i);
            String user_name = actor.getString("user_name");
            allNames.add(user_name);
        }

} catch (JSONException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

答案 3 :(得分:0)

str = {"17": {"user_name": "test1"}, "18": {"user_name": "test5"}, "19": {"user_name": "test9"}}
JSONObject ob1 = new JSONObject(str)
JSONObject ob2 = ob1.getJSONObject("17");
String userName = ob2.getString("user_name");


str = [{"user_name": "test1"},{"user_name": "test5"},{"user_name": "test9"}]
List<String> allNames = new ArrayList<String>();
JSONArray jsonArray = new JSONArray("str");
for(i=0; i < jsonArray.length(); i++){
    JSONObject ob = jsonArray.getJSONObject(i);
    allNames.add(ob.getString("user_name")
}

答案 4 :(得分:0)

如果你使用Gson库,这很容易。

    String json = "{\"17\": {\"user_name\": \"test1\"}, \"18\": {\"user_name\": \"test5\"}, \"19\": {\"user_name\": \"test9\"}}";
    Gson gson = new GsonBuilder().create();
    Map<String,User> users = gson.fromJson(json, new TypeToken<Map<String,User> >(){}.getType());
    for(String key : users.keySet()) {
        Log.d("DEBUG",key+" -> "+users.get(key).getUser_name());
    }

User类是一个简单的POJO,如:

公共类用户{

private String user_name;

public String getUser_name() {
    return user_name;
}

public void setUser_name(String user_name) {
    this.user_name = user_name;
}

}

答案 5 :(得分:0)

您正尝试将ColumnSource解析为ColumnTemplateSelector

JSONArray

使用以下代码.....

JSONObject