我无法解析我的JSON API -
[
{
"Id":1,
"FirstName":"admin",
"LastName":"admin",
"Mobile":null,
"Email":"rajaish.rolen@gmail.com",
"UserName":"admin",
"password":"admin",
"RoleID":0,
"CreationDate":"2013-11-15T00:00:00",
"ModificationDate":"2013-11-15T00:00:00"
}
]
我已经在线阅读了一些教程,其中有一个JSONParser类,其中有一个返回JSONObject的getJSONFromURL
方法。但是在所有这些教程中,他们的API从JSON Object {
开始,而我的API从数组开始[。我需要做哪些更改才能解析此api?这样做的其他方式?请帮帮我,这是一个令人头疼的3天。
这是我的JSONParser类 -
package com.example.projectfortab;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.util.Log;
public class JSONParser {
static InputStream is = null;
static JSONArray jObj = null;
static String json = "";
// constructor
public JSONParser() {
}
public JSONArray getJSONFromUrl(String url) {
// Making HTTP request
try {
// defaultHttpClient
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
httpPost.setHeader("Accept", "application/json");
httpPost.setHeader("Content-type", "application/json");
HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(
is, "iso-8859-1"), 8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
is.close();
json = sb.toString();
} catch (Exception e) {
Log.e("Buffer Error", "Error converting result " + e.toString());
}
// try parse the string to a JSON object
try {
jObj = new JSONArray(json);
} catch (JSONException e) {
Log.e("JSON Parser", "Error parsing data " + e.toString());
}
// return JSON String
return jObj;
}
}
这就是我正在做的解析它 -
private static final String url = (Some url);
private static final String TAG_ID = "CreationDate";
private static final String TAG_FIRSTNAME = "password";
private static final String TAG_LASTNAME = "LastName";
String id;
JSONArray user = null; here
private class JSONParse extends AsyncTask<String, String, JSONArray> {
private ProgressDialog pDialog;
@Override
protected JSONArray doInBackground(String... params) {
JSONParser jParser = new JSONParser();
JSONArray json = jParser.getJSONFromUrl(url);
System.out.println("LENGTH" + json.length());
try {
JSONObject json1 = json.getJSONObject(0);
if(json1.has(TAG_ID))
id = json1.getString(TAG_ID);
else
System.out.println("NO SUCH KEY");
} catch (JSONException e) {
e.printStackTrace();
}
Log.d("anush", "ID From JSON : " + id);
return json;
}
当我尝试这个时,logcat显示 -
11-19 12:39:44.812: E/JSON Parser(29746): Error parsing data org.json.JSONException: Value {"ExceptionType":"System.NullReferenceException","Message":"An error has occurred.","StackTrace":" at Lifestyle.Models.UserLoginRepository.Save(UserLogin item) in D:\\project\\LifestyleSolution2\\LifestyleSolution\\LifestyleSolution\\Lifestyle\\Models\\Repository\\UserLoginRepository.cs:line 83\r\n at Lifestyle.Controllers.UserController.Post(UserLogin user) in D:\\project\\LifestyleSolution2\\LifestyleSolution\\LifestyleSolution\\Lifestyle\\Controllers\\UserController.cs:line 51","ExceptionMessage":"Object reference not set to an instance of an object."} of type org.json.JSONObject cannot be converted to JSONArray
和
11-19 12:39:44.842: E/AndroidRuntime(29746): FATAL EXCEPTION: AsyncTask #1
11-19 12:39:44.842: E/AndroidRuntime(29746): java.lang.RuntimeException: An error occured while executing doInBackground()
11-19 12:39:44.842: E/AndroidRuntime(29746): at android.os.AsyncTask$3.done(AsyncTask.java:299)
11-19 12:39:44.842: E/AndroidRuntime(29746): at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352)
11-19 12:39:44.842: E/AndroidRuntime(29746): at java.util.concurrent.FutureTask.setException(FutureTask.java:219)
11-19 12:39:44.842: E/AndroidRuntime(29746): at java.util.concurrent.FutureTask.run(FutureTask.java:239)
11-19 12:39:44.842: E/AndroidRuntime(29746): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
11-19 12:39:44.842: E/AndroidRuntime(29746): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
11-19 12:39:44.842: E/AndroidRuntime(29746): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
11-19 12:39:44.842: E/AndroidRuntime(29746): at java.lang.Thread.run(Thread.java:856)
11-19 12:39:44.842: E/AndroidRuntime(29746): Caused by: java.lang.NullPointerException
11-19 12:39:44.842: E/AndroidRuntime(29746): at com.example.projectfortab.FirstActivity$JSONParse.doInBackground(FirstActivity.java:260)
11-19 12:39:44.842: E/AndroidRuntime(29746): at com.example.projectfortab.FirstActivity$JSONParse.doInBackground(FirstActivity.java:1)
11-19 12:39:44.842: E/AndroidRuntime(29746): at android.os.AsyncTask$2.call(AsyncTask.java:287)
11-19 12:39:44.842: E/AndroidRuntime(29746): at java.util.concurrent.FutureTask.run(FutureTask.java:234)
11-19 12:39:44.842: E/AndroidRuntime(29746): ... 4 more
答案 0 :(得分:1)
读取对String的响应,然后使用以下代码。
try {
JSONObject jsonObject = new JSONArray("ResponseString").getJSONObject(0);
jsonObject.getString("RequiredStrings");
----
----
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
答案 1 :(得分:1)
尝试这个..
String request = value[0];
response = webAPIRequest.performPost_String(request,null);
if(response != null)
{
Log.i("Message Send Respopnce:==",response);
try {
JSONObject j_object_main=new JSONObject(response);
JSONObject j_object_data=j_object_main.optJSONObject("data");
success=j_object_data.optString("Success");
if(success.equalsIgnoreCase("1"))
{
JSONArray jarray_news=j_object_data.optJSONArray("newInfo");
for(int i=0;i<jarray_news.length();i++)
{
}
答案 2 :(得分:1)
try {
JSONArray jarray = new JSONArray(Resoponsedata);
JSONObject jobject = jarray.getJSONObject(0);
String id = jobject .getString("Id");
---------------
} catch (JSONException e) {
e.printStackTrace();
}
答案 3 :(得分:0)
试试如下:
JSONArray m_arry = new JSONArray("your response");
for (int i = 0; i < m_arry.length(); i++)
{
JSONObject m_mydetail = m_arry.getJSONObject(i);
String id=m_mydetail.getString("Id");
String firstName=m_mydetail.getString("FirstName");
String lastName= m_mydetail.getString("LastName");
String email =m_mydetail.getString("Email");
...............................
//and so on.
}
有关详情HERE
答案 4 :(得分:0)
试试这个:
URL url1 = new URL("YOUR_URL");
HttpURLConnection request1 = (HttpURLConnection) url1.openConnection();
request1.setRequestMethod("GET");
request1.connect();
String responseBody = convertStreamToString(request1.getInputStream());
JSONArray jsonArray = new JSONArray(responseBody);
for (int i = 0; i < jsonArray.length(); i++) {
String email = jsonArray.getJSONObject(i).getString("Email");
System.out.println(email);
//... Similarly you can parse all the objects..
}
上述类中使用的方法:
private static String convertStreamToString(InputStream is) {
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
StringBuilder sb = new StringBuilder();
String line = null;
try {
while ((line = reader.readLine()) != null) {
sb.append(line).append("\n");
}
} catch (IOException e) {
} finally {
try {
is.close();
} catch (IOException e) {
}
}
return sb.toString();
}