Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JSONException:值“cityId”:4,cityName:“Ahmedabad”java.lang.String无法转换为JSONObject_Java_Android_Json - Fatal编程技术网

JSONException:值“cityId”:4,cityName:“Ahmedabad”java.lang.String无法转换为JSONObject

JSONException:值“cityId”:4,cityName:“Ahmedabad”java.lang.String无法转换为JSONObject,java,android,json,Java,Android,Json,下面是代码fells。我正在尝试解析嵌套在jsonarray中的jsonarray Json: Java代码: public void setJson(String jsonstring) { try { JSONObject mainobject=new JSONObject(jsonstring); JSONArray array=new JSONArray(); array=mainobject

下面是代码fells。我正在尝试解析嵌套在jsonarray中的jsonarray

Json:

Java代码:

public void setJson(String jsonstring)
    {
        try {
            JSONObject mainobject=new JSONObject(jsonstring);
            JSONArray array=new JSONArray();
            array=mainobject.getJSONArray("hospital");
            for(int i=0;i<array.length();i++)
            {


                JSONObject jobj=array.getJSONObject(i);


                JSONArray citynamearray=jobj.getJSONArray("cityName");
                JSONArray insurancerarray=jobj.getJSONArray("insurance");
                for(int j=0;j<insurancerarray.length();j++)
                {

                    for(int k=0;k<citynamearray.length();k++)
                    {
                        JSONObject jobjcity = citynamearray.getJSONObject(k);
                        JSONObject jobjinsurance=insurancerarray.getJSONObject(j);

                        if((jobjcity.getString("cityName").equals(choosenCity))&&(jobjinsurance.getString("name").equals(choosenInsurance)))
                        {
                            hospitalnames=new ArrayList<String>();
                            hospitalidslist=new ArrayList<Integer>();
                            hospitalphone=new ArrayList<String>();
                            hospitalemail=new ArrayList<String>();
                            hospitalwebsite=new ArrayList<String>();
                            hospitaladdress=new ArrayList<String>();
                            hospitalfax=new ArrayList<String>();
                            hospitalnames.add(jobj.getString("hospitalName"));
                            hospitalidslist.add(jobj.getInt("hospitalId"));
                            if(jobj.getString("phoneNumber").equals(""))
                            {
                                hospitalphone.add("Not Available");
                            }
                            else
                            {
                                hospitalphone.add(jobj.getString("phoneNumber"));
                            }
                            if(jobj.getString("email").equals(""))
                            {
                                hospitalemail.add("Not Available");
                            }
                            else
                            {
                                hospitalemail.add(jobj.getString("email"));
                            }
                            if(jobj.getString("website").equals(""))
                            {
                                hospitalwebsite.add("Not Available");
                            }
                            else
                            {
                                hospitalwebsite.add(jobj.getString("website"));
                            }
                            if(jobj.getString("hospitalAddress").equals(""))
                            {
                                hospitaladdress.add("Not Available");
                            }
                            else
                            {
                                hospitaladdress.add(jobj.getString("hospitalAddress"));
                            }
                            if(jobj.getString("fax").equals(""))
                            {
                                hospitalfax.add("Not Available");
                            }
                            else
                            {
                                hospitalfax.add(jobj.getString("fax"));
                            }

                            flag=1;
                        }



                    }

                }
            }


            if(flag==0)
            {
                hospitalnames=new ArrayList<String>();
                hospitalidslist=new ArrayList<Integer>();
                hospitalphone=new ArrayList<String>();
                hospitalemail=new ArrayList<String>();
                hospitalwebsite=new ArrayList<String>();
                hospitaladdress=new ArrayList<String>();
                hospitalfax=new ArrayList<String>();
                hospitalnames.add("No Match Found");
                hospitalidslist.add(0);
                hospitalphone.add("No Match Found");
                hospitalemail.add("No Match Found");
                hospitalwebsite.add("No Match Found");
                hospitalfax.add("No Match Found");
                hospitaladdress.add("No Match Found");

            }

请帮我输入以上代码。如果你需要更多信息,请告诉我。它不解析子数组保险或cityName。有什么建议吗?

这是值'cityId':6',cityName:'Baroda',但在您的代码中。你让cityName有钥匙。 这是错误的

在将Json转换为对象之前,只需检查Json查看器,您就会有一个想法

如果您的Json是这种格式,它应该已经为您工作了

{
  "cityName": [
    {
      "cityId": 6,
      "cityName": "Baroda"
    },
    {
      "cityId": 7,
      "cityName": "Surat"
    }
  ]
}
如果您仍然希望以相同的方式使用json

repalce 
{"cityName":["'cityId':4',cityName: 'Ahmedabad'","'cityId':8',cityName: 'Pune'"]}
with
{"cityName":["'cityId':6,'cityName':'Baroda'","'cityId':7,'cityName':'Surat'"   ] }

replace

JSONObject jobjcity = citynamearray.getJSONObject(k);

with
JSONObject jobjcity = new JSONObject(citynamearray.getJSONString(k));

参考这篇文章,试着了解一下你的想法

希望它能帮助你

试试这个方法,希望它能帮助你解决你的问题


请将此简化为一个简短但完整的示例。我怀疑90%的代码和90%的JSON与问题无关。对于JSONArray insurance和cityName中使用直接字符串而不是JSONObject的数据,请检查JSON响应。纠正你的回答,再试一次。希萨提斯:是的。这似乎是个错误。正在努力。让我们看看这是否解决了问题。保险:[{id:17,姓名:ICICI Lombard General insurance Co.Ltd.},{id:18,姓名:National insurance Co.Ltd.}],城市:[{cityId:4,cityName:Ahmedabad},{cityId:8,cityName:Pune}]为我工作。谢谢大家。嗨,哈莎:我签了Jsonlint,上面写着有效的Json。你还有其他建议吗?如果cityName是键和值格式,我们如何通过Android中的哪个函数获取它的值,或者我们必须改变它的结构?Json是有效的,但它不适合你的实现。请检查更新的Jsona:成功了。谢谢+1。你试过这种方法吗?给我几分钟的时间。我马上就做。是的。提前谢谢你的尝试。+1成功了吗?我有个问题。cityName子数组和insurance子数组有不同的长度。我们不需要两个循环吗?在你的回答中,两个数组的大小都和y相同。我使用了其中一个数组长度进行迭代惯性导航与制导。
repalce 
{"cityName":["'cityId':4',cityName: 'Ahmedabad'","'cityId':8',cityName: 'Pune'"]}
with
{"cityName":["'cityId':6,'cityName':'Baroda'","'cityId':7,'cityName':'Surat'"   ] }

replace

JSONObject jobjcity = citynamearray.getJSONObject(k);

with
JSONObject jobjcity = new JSONObject(citynamearray.getJSONString(k));
public void setJson(String jsonstring) {
        try {
            JSONObject mainobject = new JSONObject(jsonstring);
            JSONArray array = mainobject.getJSONArray("hospital");
            for (int i = 0; i < array.length(); i++) {
                JSONObject jobj = array.getJSONObject(i);
                JSONArray citynamearray = jobj.getJSONArray("cityName");
                JSONArray insurancerarray = jobj.getJSONArray("insurance");
                for (int j = 0; j < insurancerarray.length(); j++) {
                    String city = citynamearray.getString(j).split(",")[1].split(":")[1].replace("'","").trim();
                    String insurance = insurancerarray.getString(j).split(",")[1].split(":")[1].replace("'","").trim();
                    String cityid = citynamearray.getString(j).split(",")[0].split(":")[1].replace("'","").trim();
                    String insuranceid = insurancerarray.getString(j).split(",")[0].split(":")[1].replace("'","").trim();

                    if ((city.equals(choosenCity)) && (insurance.equals(choosenInsurance))) {
                        hospitalnames = new ArrayList<String>();
                        hospitalidslist = new ArrayList<Integer>();
                        hospitalphone = new ArrayList<String>();
                        hospitalemail = new ArrayList<String>();
                        hospitalwebsite = new ArrayList<String>();
                        hospitaladdress = new ArrayList<String>();
                        hospitalfax = new ArrayList<String>();
                        hospitalnames.add(jobj.getString("hospitalName"));
                        hospitalidslist.add(jobj.getInt("hospitalId"));
                        if (jobj.getString("phoneNumber").equals("")) {
                            hospitalphone.add("Not Available");
                        } else {
                            hospitalphone.add(jobj.getString("phoneNumber"));
                        }
                        if (jobj.getString("email").equals("")) {
                            hospitalemail.add("Not Available");
                        } else {
                            hospitalemail.add(jobj.getString("email"));
                        }
                        if (jobj.getString("website").equals("")) {
                            hospitalwebsite.add("Not Available");
                        } else {
                            hospitalwebsite.add(jobj.getString("website"));
                        }
                        if (jobj.getString("hospitalAddress").equals("")) {
                            hospitaladdress.add("Not Available");
                        } else {
                            hospitaladdress.add(jobj.getString("hospitalAddress"));
                        }
                        if (jobj.getString("fax").equals("")) {
                            hospitalfax.add("Not Available");
                        } else {
                            hospitalfax.add(jobj.getString("fax"));
                        }

                        flag = 1;
                    }
                }

            }
        }catch (JSONException e){
            e.printStackTrace();
        }
        if (flag == 0) {
            hospitalnames = new ArrayList<String>();
            hospitalidslist = new ArrayList<Integer>();
            hospitalphone = new ArrayList<String>();
            hospitalemail = new ArrayList<String>();
            hospitalwebsite = new ArrayList<String>();
            hospitaladdress = new ArrayList<String>();
            hospitalfax = new ArrayList<String>();
            hospitalnames.add("No Match Found");
            hospitalidslist.add(0);
            hospitalphone.add("No Match Found");
            hospitalemail.add("No Match Found");
            hospitalwebsite.add("No Match Found");
            hospitalfax.add("No Match Found");
            hospitaladdress.add("No Match Found");

        }
    }