【问题标题】:Trouble extracting values from JSON object in Java无法从 Java 中的 JSON 对象中提取值
【发布时间】:2017-08-08 10:01:09
【问题描述】:

好的,我在这里挣扎。我从我的 php 服务器获取以下 JSON 格式的字符串(称为“结果”)(已编辑!最后我缺少一个花括号):

{"L1":[{"UserName":"User1","Avatar":"1"},{"UserName":"User2","Avatar":"2"},{"UserName": "User3","Avatar":"3"}],"L2":[{"UserName":"User4","Avatar":"4"},{"UserName":"User5","Avatar": "5"}]}

我正在尝试从 L1 对象 (?) 中提取带有 Avatar 编号的 ArrayList。但我得到一个错误

org.json.JSONException: 值 [{"UserName":"User1","Avatar":"1"},{"UserName":"User2","Avatar":"2"},{"UserName":"User3","Avatar": "3"}] org.json.JSONArray 类型的 L1 无法转换为 JSONObject

这是我的代码:

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());
            }

如果我使用

jsonObject.getJSONArray("L1") 

我得到同样的错误。 有什么建议? 提前致谢!

(编辑:我在原始帖子中犯了一个错误。JSON 字符串中缺少一个大括号。感谢那些发现它的人)

【问题讨论】:

  • 如果你在 jsonlint.com 中查看这个 json,你会发现它的格式不正确
  • 也可以试试jsonpath.com
  • 您的 json 无效。在后端正确格式化。粘贴 json jsoneditoronline.org 以验证错误。
  • 两件事。首先,我在帖子中的 JSON 字符串末尾缺少一个“}”,因此修复了这个问题,但它并没有解决问题。其次,@atulquest93,感谢您提供的链接,将来会非常有用!

标签: java json


【解决方案1】:

试试下面的。它工作正常。我正在使用 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);
        }

【讨论】:

    【解决方案2】:

    如果有人偶然发现,这最终对我有用。我真的不明白为什么这行得通,而我的原始方法没有……可能与 JSONObjects、JSONArrays、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;
                        }
                    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-02
      • 2014-04-13
      • 1970-01-01
      • 2023-01-12
      • 2019-02-05
      • 2016-12-24
      • 2020-05-16
      • 1970-01-01
      相关资源
      最近更新 更多