好的,我在这里挣扎。我从我的php服务器获取以下JSON格式化字符串(称为"结果")(已编辑!我最后错过了大括号):
{" LI":[{"用户名":"用户1""头像":" 1" },{"用户名":"用户2""头像":" 2"},{"用户名&#34 ;: "用户3""头像":" 3"}]," L2":[{"用户名":& #34;用户4""头像":" 4"},{"用户名":"用户5""化身":" 5"}]}
我试图从L1对象(?)中提取具有头像数字的ArrayList。但是我收到了错误
org.json.JSONException:Value [{"用户名":"用户1""头像":" 1"},{"用户名":& #34;用户2""头像":" 2"},{"用户名":"用户3""化身":" 3"}] 在类型为org.json.JSONArray的L1处无法转换为JSONObject
这是我的代码:
Widget.select('"widgets".*, "widget_steps.name"')
如果我使用
try {
JSONObject jsonObject = new JSONObject(result);
JSONArray jsonArray = new JSONArray(jsonObject.getJSONObject("L1"));
ArrayList<Integer> arrList = new ArrayList<>();
if (jsonArray != null) {
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject json = jsonArray.getJSONObject(i);
arrList.add(json.getInt("Avatar"));
AvatarList = arrList;
}
}
String query_result = "SUCCESS";
if (query_result.equals("FAILURE")) {
} else {
setAvatars(AvatarList);
}
} catch (JSONException e) {
Log.e("log_tag", "Error converting result "+e.toString());
}
我得到了同样的错误。 有什么建议? 提前谢谢!
(编辑:我在原帖中犯了一个错误。在JSON字符串中缺少大括号。感谢那些抓住它的人)
答案 0 :(得分:0)
尝试下面的一个。它工作正常。我使用的是json-simple-1.1.1 jar
String r="{\"L1\":[{\"UserName\":\"User1\",\"Avatar\":\"1\"},{\"UserName\":\"User2\",\"Avatar\":\"2\"},{\"UserName\":\"User3\",\"Avatar\":\"3\"}],\"L2\":[{\"UserName\":\"User4\",\"Avatar\":\"4\"},{\"UserName\":\"User5\",\"Avatar\":\"5\"}]}";
Object obj=JSONValue.parse(r);
JSONObject jsonObject = (JSONObject) obj;
JSONArray jsonArray = (JSONArray) jsonObject.get("L1");
ArrayList<Integer> arrList = new ArrayList<>();
if (jsonArray != null) {
for (int i = 0; i < jsonArray.size(); i++) {
JSONObject json = (JSONObject) jsonArray.get(i);
arrList.add((Integer.parseInt((String) json.get("Avatar"))));
AvatarList = arrList;
}
}
String query_result = "SUCCESS";
if (query_result.equals("FAILURE")) {
} else {
setAvatars(AvatarList);
}
答案 1 :(得分:0)
如果有人偶然发现这个问题,最终会为我工作。我真的不明白为什么这样有效,而我的原始方法并没有...与JSONObjects vs JSONArrays vs Strings以及[,{,}和]之类的东西有关。
try {
JSONObject jsonObject = new JSONObject(result);
JSONArray jsonArray = new JSONArray(jsonObject.getString("L1"));
ArrayList<Integer> arrList = new ArrayList<>();
if (jsonArray != null) {
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject json = jsonArray.getJSONObject(i);
arrList.add(json.getInt("Avatar"));
AvatarList = arrList;
}
}