您如何建议我解析这个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)。我不知道为什么它不起作用。
有人可以给我一些提示,教程或示例吗?
非常感谢!
答案 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