Java Json类型不匹配:无法转换为字符串
我正在开发一个程序,该程序将发布到服务器并检索json对象,然后将其转换为字符串数组 当我在浏览器上测试结果时,我得到以下结果:Java Json类型不匹配:无法转换为字符串,java,android,json,Java,Android,Json,我正在开发一个程序,该程序将发布到服务器并检索json对象,然后将其转换为字符串数组 当我在浏览器上测试结果时,我得到以下结果: {"Bookname":["Alive-O","All Write Now ","Bun Go Barr 1","Planet Maths","Small World"],"SubjectName":["Religion","English","Irish","Maths","Science"]} 这是我的类,我在其中发布和转换字符串: try { Http
{"Bookname":["Alive-O","All Write Now ","Bun Go Barr 1","Planet Maths","Small World"],"SubjectName":["Religion","English","Irish","Maths","Science"]}
这是我的类,我在其中发布和转换字符串:
try {
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://cosy.azurewebsites.net/bookrequest.php");
User user = userLocalStore.getLoggedInUser();
String username = user.username;
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1);
nameValuePairs.add(new BasicNameValuePair( "Username", username ));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
String result = EntityUtils.toString(entity);
JSONObject jsonObject = new JSONObject(result);
JSONArray jsonArray = jsonObject.getJSONArray("Bookname");
BookName = new String[jsonArray.length()];
for (int i = 0; i < jsonArray.length(); i++) {
BookName[i] = jsonArray.getString(i);
}
// for getting subjectnames
Log.v("we're getting a subject", "2");
jsonArray = jsonObject.getJSONArray("SubjectName");
BookSubject = new String[jsonArray.length()];
for (int i = 0; i < jsonArray.length(); i++) {
BookSubject[i] = jsonArray.getString(i);
}
}
试试看{
HttpClient HttpClient=新的DefaultHttpClient();
HttpPost HttpPost=新的HttpPost(“http://cosy.azurewebsites.net/bookrequest.php");
User User=userLocalStore.getLoggedInUser();
字符串username=user.username;
List nameValuePairs=新的ArrayList(1);
添加(新的BasicNameValuePair(“用户名”,Username));
setEntity(新的UrlEncodedFormEntity(nameValuePairs));
HttpResponse response=httpclient.execute(httppost);
HttpEntity=response.getEntity();
字符串结果=EntityUtils.toString(实体);
JSONObject JSONObject=新JSONObject(结果);
JSONArray JSONArray=jsonObject.getJSONArray(“书名”);
BookName=新字符串[jsonArray.length()];
for(int i=0;i
下面是我的日志猫告诉我的:
02-21 18:15:35.538 1436-3694/net.azurewebsites.cosy W/System.err﹕ org.json.JSONException: Value [] of type org.json.JSONArray cannot be converted to JSONObject
02-21 18:15:35.538 1436-3694/net.azurewebsites.cosy W/System.err﹕ at org.json.JSON.typeMismatch(JSON.java:111)
02-21 18:15:35.538 1436-3694/net.azurewebsites.cosy W/System.err﹕ at org.json.JSONObject.<init>(JSONObject.java:159)
02-21 18:15:35.538 1436-3694/net.azurewebsites.cosy W/System.err﹕ at org.json.JSONObject.<init>(JSONObject.java:172)
02-21 18:15:35.538 1436-3694/net.azurewebsites.cosy W/System.err﹕ at net.azurewebsites.cosy.Books$getBooks.doInBackground(Books.java:148)
02-21 18:15:35.538 1436-3694/net.azurewebsites.cosy W/System.err﹕ at net.azurewebsites.cosy.Books$getBooks.doInBackground(Books.java:106)
02-21 18:15:35.538 1436-3694/net.azurewebsites.cosy W/System.err﹕ at android.os.AsyncTask$2.call(AsyncTask.java:288)
02-21 18:15:35.538 1436-3694/net.azurewebsites.cosy W/System.err﹕ at java.util.concurrent.FutureTask.run(FutureTask.java:237)
02-21 18:15:35.542 1436-3694/net.azurewebsites.cosy W/System.err﹕ at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
02-21 18:15:35.542 1436-3694/net.azurewebsites.cosy W/System.err﹕ at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
02-21 18:15:35.542 1436-3694/net.azurewebsites.cosy W/System.err﹕ at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
02-21 18:15:35.542 1436-3694/net.azurewebsites.cosy W/System.err﹕ at java.lang.Thread.run(Thread.java:841)
02-21 18:15:35.538 1436-3694/net.azurewebsites.cosy W/System.err﹕ org.json.JSONException:org.json.JSONArray类型的值[]无法转换为JSONObject
02-21 18:15:35.538 1436-3694/net.azurewebsites.cosy W/System.err﹕ 在org.json.json.typeMismatch(json.java:111)
02-21 18:15:35.538 1436-3694/net.azurewebsites.cosy W/System.err﹕ 位于org.json.JSONObject(JSONObject.java:159)
02-21 18:15:35.538 1436-3694/net.azurewebsites.cosy W/System.err﹕ 位于org.json.JSONObject(JSONObject.java:172)
02-21 18:15:35.538 1436-3694/net.azurewebsites.cosy W/System.err﹕ 在net.azurewebsites.cosy.Books$getBooks.doInBackground(Books.java:148)
02-21 18:15:35.538 1436-3694/net.azurewebsites.cosy W/System.err﹕ 在net.azurewebsites.cosy.Books$getBooks.doInBackground(Books.java:106)
02-21 18:15:35.538 1436-3694/net.azurewebsites.cosy W/System.err﹕ 在android.os.AsyncTask$2.call(AsyncTask.java:288)
02-21 18:15:35.538 1436-3694/net.azurewebsites.cosy W/System.err﹕ 位于java.util.concurrent.FutureTask.run(FutureTask.java:237)
02-21 18:15:35.542146-3694/net.azurewebsites.cosy W/System.err﹕ 在android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
02-21 18:15:35.542146-3694/net.azurewebsites.cosy W/System.err﹕ 位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
02-21 18:15:35.542146-3694/net.azurewebsites.cosy W/System.err﹕ 位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
02-21 18:15:35.542146-3694/net.azurewebsites.cosy W/System.err﹕ 运行(Thread.java:841)
我试图让它在课堂上用作数组 错误表示您正试图将
JSONArray
转换为JSONObject
,这意味着此指令:
JSONObject jsonObject = new JSONObject(result);
这是有问题的。您得到的JSON很有可能被括号包围(因为您是在浏览器中测试的,而不是在移动设备上测试的)。尝试更改:
JSONObject jsonObject = new JSONObject(result);
到
该错误表示您正试图将
JSONArray
转换为JSONObject
,这意味着此指令:
JSONObject jsonObject = new JSONObject(result);
这是有问题的。您得到的JSON很有可能被括号包围(因为您是在浏览器中测试的,而不是在移动设备上测试的)。尝试更改:
JSONObject jsonObject = new JSONObject(result);
到
您得到的错误是哪一行?@Majora320 String result=EntityUtils.toString(entity);JSONObject JSONObject=新JSONObject(结果);行是否正常,这就是@DeveloperXy所说的,您得到的错误是哪行?@Majora320 String result=EntityUtils.toString(entity);JSONObject JSONObject=新JSONObject(结果);行正常吗,@DeveloperXy saidI就是这么做的,它修复了这个错误,现在说org.json.JSONException:Index 0超出范围[0..0),这意味着您从服务器得到的响应是空的
JSONArray
([])。请通过将您得到的响应记录到logcat来确认我的理论。您是正确的响应是[]这是非常奇怪的,我知道发布的内容是正确的,所以我不知道为什么happening@EoinÓCribín在这种情况下,您必须确保与服务器建立成功的连接。修复了获得结果的问题帖子是大写字母(愚蠢的错误)虽然我得到了相同的错误,但它不会转换结果如下:02-21 18:52:03.643 1478-1523/net.azurewebsites.cosy W/System.err﹕ org.json.JSONException:org.json.JSONObject类型的值{“Bookname”:[“Alive-O”,“All Write Now”,“Bun Go Barr 1”,“行星数学”,“Small World”],“SubjectName:[“宗教”,“英语”,“爱尔兰”,“数学”,“科学”]}无法转换为JSONArrayI,它修复了错误,现在说org.json.JSONException:Index 0超出范围[0..0)这意味着您从服务器得到的响应是一个空的JSONArray
([])。请将您得到的响应记录到logcat以确认我的理论。您是对的响应是[]这是非常奇怪的,我知道发布的内容是正确的,所以我不知道为什么happening@EoinÓCribín在这种情况下,您必须确保与服务器建立成功的连接。修复了获得结果的问题帖子是大写字母(愚蠢的错误)虽然我得到了相同的错误,但它不会转换结果如下:02-21 18:52:03.643 1478-1523/net.azurewebsites.cosy W/System.err﹕ org.json.JSONException:Value{“Bookname”:[“Alive-O”,“立即全部写入”,“Bun-Go-Barr 1”,“Pl