首页 > 解决方案 > JSONObject getString 在第一次运行时返回 null

问题描述

我有这个String data = "[ {\"pname\":\"7\", \"qty\":\"222\"}, {\"pname\":\"8\", \"qty\":\"5\"}, {\"pname\":\"10\", \"qty\":\"65\"}, ]" ; 在数组列表中,我想将它们放在每个循环的变量上并将其保存到数据库中,但是现在我出于调试目的执行此代码,因为在代码的第一个循环中,它应该输出“数量”值,但它是一个像这样的空值,但{"pname":"7","qty":"222"} null在下一次循环运行时它输出这个{"pname":"8","qty":"5"} 222似乎在第二个循环上,第一个对象的数量值然后在第二个循环上被采用,最终输出是这个 {"pname":"7","qty":"222"} null {"pname":"8","qty":"5"} 222 {"pname":"10","qty":"65"} 5

这是我拥有的代码

 String data = "[ {\"pname\":\"7\", \"qty\":\"222\"}, {\"pname\":\"8\", \"qty\":\"5\"}, {\"pname\":\"10\", \"qty\":\"65\"}, ]" ;
        HashMap<String, String> item = new HashMap<String, String>();
        JSONArray jsonArray = new JSONArray(data);
        JSONObject jsonObject = new JSONObject();
        ArrayList<HashMap> mylist = new ArrayList<HashMap>();
        String txtPname = "", txtQty = "";
        if (jsonArray == null) {
            System.out.println("json is empty");
        } else {
            for (int i = 0; i < jsonArray.length(); i++) {
                    jsonObject = jsonArray.getJSONObject(i);
                    txtPname = item.put("pname",            jsonObject.getString("pname"));
                    txtQty = item.put("qty", jsonObject.getString("qty"));
                    output.append(jsonObject).append("    ");
                    output.append(txtQty).append("  ");
            }

        }

谁能帮我解决这个问题?任何帮助将不胜感激,谢谢!!!

标签: javajsonfor-loop

解决方案


您为 txtQty 分配了错误的值,而不是 JSONObject 中的当前值:

HashMapPut方法(来自 Docs):

回报:

与 key 关联的前一个值,如果没有 key 映射,则返回 null。(返回 null 还可以指示映射先前将 null 与 key 关联。)

这就是为什么你第一次尝试得到 null 而第二次得到 222 的原因。

以下代码将为您提供所需的结果:

 String data = "[ {\"pname\":\"7\", \"qty\":\"222\"}, {\"pname\":\"8\", \"qty\":\"5\"}, {\"pname\":\"10\", \"qty\":\"65\"}, ]" ;
        HashMap<String, String> item = new HashMap<String, String>();
        JSONArray jsonArray = new JSONArray(data);
        JSONObject jsonObject = new JSONObject();
        ArrayList<HashMap> mylist = new ArrayList<HashMap>();
        String txtPname = "", txtQty = "";
        if (jsonArray == null) {
            System.out.println("json is empty");
        } else {
            for (int i = 0; i < jsonArray.length(); i++) {
                    jsonObject = jsonArray.getJSONObject(i);
                    txtPname = item.put("pname",            jsonObject.getString("pname"));
                    txtQty = item.put("qty", jsonObject.getString("qty"));
                    output.append(jsonObject).append("    ");
                    output.append(jsonObject.getString("qty")).append("  ");
            }

        }

推荐阅读