Java JSONObject getString在第一次运行时返回null

Java JSONObject getString在第一次运行时返回null,java,json,for-loop,Java,Json,For Loop,我有这个字符串数据=“[{\'pname\':\'7\',\'qty\':\'222\',{\'pname\':\'8\',\'qty\':\'5\',{\'pname\':\'10\',\'qty\':'65\',]” 在数组列表中,我想把它们放在每个循环的变量上,并保存到数据库中,但现在我编写这段代码是为了调试,因为在代码的第一个循环中,它被用来输出“qty”值,但它是一个空值,类似于下面的{“pname”:“7”,“qty”:“222”}空但在下一次循环运行时,它输出此{“pname”:“

我有这个
字符串数据=“[{\'pname\':\'7\',\'qty\':\'222\',{\'pname\':\'8\',\'qty\':\'5\',{\'pname\':\'10\',\'qty\':'65\',]”
在数组列表中,我想把它们放在每个循环的变量上,并保存到数据库中,但现在我编写这段代码是为了调试,因为在代码的第一个循环中,它被用来输出“qty”值,但它是一个空值,类似于下面的
{“pname”:“7”,“qty”:“222”}空
但在下一次循环运行时,它输出此
{“pname”:“8”,“qty”:“5”}222似乎在第二个循环上,第一个对象qty值随后在第二个循环上取下,最终输出为
{“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("  ");
            }

        }
String data=“[{\'pname\':\'7\',\'qty\':\'222\',{\'pname\':'8\',\'qty\':'5\',{\'pname\':'10\',\'qty\':'65\',]”;
HashMap项=新建HashMap();
JSONArray JSONArray=新的JSONArray(数据);
JSONObject JSONObject=新的JSONObject();
ArrayList mylist=新的ArrayList();
字符串txtPname=“”,txtQty=“”;
if(jsonArray==null){
System.out.println(“json为空”);
}否则{
for(int i=0;i

有人能帮我吗?任何帮助都将不胜感激,谢谢

将错误的值分配给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("  ");
            }

        }
String data=“[{\'pname\':\'7\',\'qty\':\'222\',{\'pname\':'8\',\'qty\':'5\',{\'pname\':'10\',\'qty\':'65\',]”;
HashMap项=新建HashMap();
JSONArray JSONArray=新的JSONArray(数据);
JSONObject JSONObject=新的JSONObject();
ArrayList mylist=新的ArrayList();
字符串txtPname=“”,txtQty=“”;
if(jsonArray==null){
System.out.println(“json为空”);
}否则{
for(int i=0;i
您将错误的值分配给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("  ");
            }

        }
String data=“[{\'pname\':\'7\',\'qty\':\'222\',{\'pname\':'8\',\'qty\':'5\',{\'pname\':'10\',\'qty\':'65\',]”;
HashMap项=新建HashMap();
JSONArray JSONArray=新的JSONArray(数据);
JSONObject JSONObject=新的JSONObject();
ArrayList mylist=新的ArrayList();
字符串txtPname=“”,txtQty=“”;
if(jsonArray==null){
System.out.println(“json为空”);
}否则{
for(int i=0;i
请添加您正在使用的循环。@Markus Deibei,是的,我添加了它,我立即编辑了这篇文章。请参阅上面的代码,谢谢您的输出和循环不适合。行
jsonObject=jsonArray.getJSONObject(0)应始终引用列表中的同一对象。这可能是
jsonObject=jsonArray.getJSONObject(i)是的,这正是我的循环目前的情况,只是当我把它放在这个问题上时,我被打错了,很抱歉,实际上是我,但输出仍然是相同的。请添加你正在使用的循环。@Markus Deibei,是的,我添加了它,我立即编辑了文章。请参阅上面的代码,谢谢您的输出和循环不适合。行
jsonObject=jsonArray.getJSONObject(0)应始终引用列表中的同一对象。这可能是
jsonObject=jsonArray.getJSONObject(i)是的,这正是我的循环目前的情况,只是当我把它放在这个问题上时,我得到了打字错误,很抱歉,它实际上是我,但输出仍然是sameI不太明白,你能给我样本代码吗?行
txtQty=item.put(“数量”,jsonObject.getString(“数量”)
不会将
jsonObject.getString(“qty”)的当前值添加到Hashmap中,然后返回它,而是返回Hashmap的当前值,即
null