无法从Java中的JSON对象中提取值

时间:2017-03-17 01:07:13

标签: java json

好的,我在这里挣扎。我从我的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字符串中缺少大括号。感谢那些抓住它的人)

2 个答案:

答案 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;
                    }
                }