JSONException:值“cityId”:4,cityName:“Ahmedabad”java.lang.String无法转换为JSONObject
下面是代码fells。我正在尝试解析嵌套在jsonarray中的jsonarray Json: Java代码: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
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");
}
}