Java JSON无值异常以及如果用户输入列名,如何检索值
我刚刚开始在android平台上开发,目前正在开发一个原型 我所做的是从在线数据库中检索数据 通过json,但列名由用户提供,即应检索数据的列的信息由用户提供 例如,在数据库中有三列-OptionA、OptionB、OPtionC,并且要检索其数据的列的名称由用户提供 这是我发送url的JSON代码-Java JSON无值异常以及如果用户输入列名,如何检索值,java,android,json,android-intent,android-asynctask,Java,Android,Json,Android Intent,Android Asynctask,我刚刚开始在android平台上开发,目前正在开发一个原型 我所做的是从在线数据库中检索数据 通过json,但列名由用户提供,即应检索数据的列的信息由用户提供 例如,在数据库中有三列-OptionA、OptionB、OPtionC,并且要检索其数据的列的名称由用户提供 这是我发送url的JSON代码- public JSONArray RetreiveData(String option,String vendorname,String company,String style,String c
public JSONArray RetreiveData(String option,String vendorname,String company,String style,String chimcompany,String shape,String size,String type,String category)
{
// URL for getting all customers
try {
url = "http://piyushsharma.byethost16.com/retreivedata.php?option="+option+"&vendorname="+vendorname+"&company="+URLEncoder.encode(company,"UTF-8")+"&style="+style+"&chimcompany="+chimcompany+"&shape="+shape+"&size="+size+"&type="+type+"&category="+URLEncoder.encode(category,"UTF-8");
Log.e("url",url);
} catch (UnsupportedEncodingException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
// Get HttpResponse Object from url.
// Get HttpEntity from Http Response Object
HttpEntity httpEntity = null;
try
{
DefaultHttpClient httpClient = new DefaultHttpClient(); // Default HttpClient
HttpGet httpGet = new HttpGet(url);
HttpResponse httpResponse = httpClient.execute(httpGet);
httpEntity = httpResponse.getEntity();
} catch (ClientProtocolException e) {
// Signals error in http protocol
e.printStackTrace();
//Log Errors Here
} catch (IOException e) {
e.printStackTrace();
}
// Convert HttpEntity into JSON Array
JSONArray jsonArray = null;
if (httpEntity != null) {
try {
String entityResponse = EntityUtils.toString(httpEntity);
Log.e("Entity Response : ", entityResponse);
jsonArray = new JSONArray(entityResponse);
} catch (JSONException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
return jsonArray;
}
这是我用于检索数据的Json代码-
public void SaveData(JSONArray jsonArray)
{
JSONObject json = null;
sizeofarray=jsonArray.length();
for(int i=0; i<=sizeofarray;i++){
try {
json = jsonArray.getJSONObject(i);
Parea=json.getString("area");
Pbaskets=json.getString(company);
Prizechim=json.getString("prize");
Psnf=json.getString(type);
Ptile=json.getString(size);
} catch (JSONException e) {
e.printStackTrace();
}
}
}
publicsvoidsavedata(JSONArray-JSONArray)
{
JSONObject json=null;
sizeofarray=jsonArray.length();
对于(int i=0;i,用户输入与JSON数组中存储的内容不匹配。这可能是由于用户输入的读取方式。您应该确认用户输入中没有隐藏字符
System.out.println("company.length() = " + company.length());
System.out.println("company = :" + company + ":");
我看不出提供的代码有什么问题。json响应是一个json对象数组,而不是一个json对象
[{"area":"29"},{"maggpie":"7890"},{"prize":"10000"},{"vintage":"6890"},{"15X10":"375"}]
如果它是一个Json对象,它应该是这种格式
{"area":"29","maggpie":"7890","prize":"10000","vintage":"6890","15X10":"375"}
因此,要修复该异常,请获取json数组
JSONArray json = jsonArray.getJSONObject(i);
JSONObject area = json.getJSONObject(0);
JSONObject company = json.getJSONObject(1);
JSONObject prize = json.getJSONObject(2);
JSONObject type = json.getJSONObject(3);
JSONObject size = json.getJSONObject(4);
//* you can get variable key key for each one, but for your example
Parea=area.getString("area");
Pbaskets=company.getString("maggpie");
Prizechim=prize.getString("prize");
Psnf=type.getString("vintage");
Ptile=size.getString("15X10");
这里忘记提到变量company、type、size是用户输入的列名。这里提供的输入是company=“maggpie”、type=“vintage”和size=“15X10”。