【问题标题】:JSONObject getString returns null on first runJSONObject getString 在第一次运行时返回 null
【发布时间】:2019-08-09 07:05:08
【问题描述】:

我有这个String data = "[ {\"pname\":\"7\", \"qty\":\"222\"}, {\"pname\":\"8\", \"qty\":\"5\"}, {\"pname\":\"10\", \"qty\":\"65\"}, ]" ; 在数组列表中,我想将它们放在每个循环的变量上并将其保存到数据库中,但是现在我出于调试目的执行此代码,因为在代码的第一个循环中,它应该输出“qty”值,但它是一个像这样的空值{"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("  ");
            }

        }

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

【问题讨论】:

  • 请添加您正在使用的循环。
  • @Markus Deibei,是的,我添加了它,我立即编辑了帖子。请看上面的代码,谢谢
  • 您的输出和循环不适合。 jsonObject = jsonArray.getJSONObject(0); 行应始终引用列表中的同一对象。这应该是jsonObject = jsonArray.getJSONObject(i);
  • 是的,这正是我的循环目前的样子,只是当我把它放在这个问题上时,我有错字,对不起,实际上是我,但输出仍然是一样的

标签: java json for-loop


【解决方案1】:

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

HashMap Put 方法(来自文档):

返回:

与键关联的前一个值,如果没有,则返回 null 键的映射。 (空返回也可以表示地图 以前将 null 与键关联。)

这就是为什么你第一次尝试得到 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("  ");
            }

        }

【讨论】:

  • 我不太明白,你能给我示例代码吗?谢谢
  • txtQty = item.put("qty", jsonObject.getString("qty"));这一行不会将jsonObject.getString("qty")的当前值添加到Hashmap中然后返回,而是返回HashMap的当前值,即null,然后才设置Hashmap 中的值到jsonObject.getString("qty")
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-01
  • 2020-06-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多