如何在android中使用url解析这个json数组?
我试图解析多个json数组,这些数组由嵌套的json数组组成。我在谷歌上搜索了很多,但不知道该怎么做。我已经完成了下面的代码,但它没有给我所有的值 到目前为止,我已经完成了此编码,如何在android中使用url解析这个json数组?,android,json,parsing,arrays,jsonobject,Android,Json,Parsing,Arrays,Jsonobject,我试图解析多个json数组,这些数组由嵌套的json数组组成。我在谷歌上搜索了很多,但不知道该怎么做。我已经完成了下面的代码,但它没有给我所有的值 到目前为止,我已经完成了此编码,结果字符串显示项目数组,而jArray显示问题数组。我对json完全陌生,因此请逐步帮助我 String result = null; InputStream is = null; try{ HttpClient httpclient = new Def
结果
字符串显示项目数组
,而jArray
显示问题数组
。我对json完全陌生,因此请逐步帮助我
String result = null;
InputStream is = null;
try{
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("url");
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
is = entity.getContent();
Log.e("log_tag", "connection success "+"nameValuePairs");
}
catch(Exception e)
{
Log.e("log_tag", "Error in http connection "+e.toString());
}
try
{
BufferedReader reader = new BufferedReader(new InputStreamReader(is,HTTP.UTF_8),8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null)
{
sb.append(line + "\n");
}
is.close();
result=sb.toString();
Log.e("log_tag", "result "+result.toString());
}
catch(Exception e)
{
Log.e("log_tag", "Error converting result "+e.toString());
}
try
{
JSONArray jArray=new JSONArray(result);
Log.w("Lengh",""+jArray);
String s="",s1,s2,s3,s4,s5,s6,s7,s8,s9;
Log.w("Lengh",""+jArray.length());
for(int i=0;i<jArray.length();i++){
JSONArray newarr = jArray.getJSONObject(i).getJSONArray("items");
Log.w("Lengh",""+newarr.length());
for(int j= 0; j<newarr.length();j++){
JSONObject json_data = newarr.getJSONObject(i);
s=json_data.getString("id");
Log.w("parsed data",""+s);
// System.out.println("Id is: "+ s);
}
}
}
catch(JSONException e)
{
Log.e("log_tag", "Error parsing data "+e.toString());
}
从以下链接下载Gson 将jar添加到libs文件夹中 为Json响应创建一个对象类。对于上述响应,对象类如下所示
import java.util.List;
public class ResponeItem {
public List<Item> items;
public List<Category> categories;
public String category_Timestamp;
public List<Question> questions;
public String question_Timestamp;
public class Item {
public String id;
public String Item_Id;
public String Item_Name;
public String Price;
public String Currency;
public String Category;
public String Description;
public String Unit;
public String food_type;
public String Image_Large;
public String Image_Thumb;
public String Timestamp;
public String Promotion;
public String Item_Name_arabic;
public String Item_Name_russian;
public String Currency_arabic;
public String Currency_russian;
public String Description_arabic;
public String Description_russian;
public String Note;
public String Nutritional_info;
public String extrafield_1;
public String extrafield_2;
public List<String> preferncess;
public List<String> preferncess_ids;
public List<String> price;
public List<String> preferncess_arabic;
}
public class Category {
public String categoryName;
public String categoryShortName;
public String catid;
public String categoryArabicName;
}
public class Question {
public String q_id;
public String q_question;
public String q_option1;
public String q_option2;
public String q_option3;
public String q_option4;
public String q_option5;
public String Timestamp;
public String q_status;
}
}
import java.util.List;
公共类响应项{
公共清单项目;
公开名单类别;
公共字符串类别\u时间戳;
公开问题清单;
公共字符串时间戳;
公共类项目{
公共字符串id;
公共字符串项\u Id;
公共字符串项目名称;
公共字符串价格;
公共字符串货币;
公共字符串类别;
公共字符串描述;
公共字符串单元;
公共字符串类型;
公共字符串图像_大;
公共字符串图像;
公共字符串时间戳;
公开宣传;
公共字符串项\名称\阿拉伯语;
公共字符串项\u名称\u俄语;
阿拉伯公共字符串货币;
俄罗斯公共字符串货币;
公共字符串描述_阿拉伯语;
公共字符串描述_俄语;
公共弦音符;
公共信息;
公共字符串外字段_1;
公共字符串外字段_2;
公开名单优先权;
公共列表首选项\u id;
公开标价;
公共列表首选阿拉伯语;
}
公共类类别{
公共字符串类别名称;
公共字符串类别ShortName;
公共字符串catid;
公共字符串categoryArabicName;
}
公开课问题{
公共字符串q_id;
公共字符串q_问题;
公共字符串q_选项1;
公共字符串q_选项2;
公共字符串q_选项3;
公共字符串q_选项4;
公共字符串q_选项5;
公共字符串时间戳;
公共字符串q_状态;
}
}
在项目中复制上述类
如下图所示调用Web服务
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.util.List;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import com.google.gson.Gson;
import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
public class ResponseActivity extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(-Your layout id-)
//Initializations
new NetworkCallTask().execute("Your-Url");
}
class NetworkCallTask extends AsyncTask<String, Void, InputStream> {
@Override
protected void onPreExecute() {
super.onPreExecute();
// Show your progressbar or something..
}
@Override
protected InputStream doInBackground(String... url) {
DefaultHttpClient client = new DefaultHttpClient();
HttpGet getRequest = new HttpGet(url[0]);
try {
HttpResponse getResponse = client.execute(getRequest);
final int statusCode = getResponse.getStatusLine()
.getStatusCode();
if (statusCode != HttpStatus.SC_OK) {
Log.w(getClass().getSimpleName(), "Error " + statusCode
+ " for URL " + url[0]);
return null;
}
HttpEntity getResponseEntity = getResponse.getEntity();
return getResponseEntity.getContent();
} catch (IOException e) {
getRequest.abort();
Log.w(getClass().getSimpleName(), "Error for URL " + url[0], e);
}
return null;
}
@Override
protected void onPostExecute(InputStream result) {
super.onPostExecute(result);
if (result != null) {
Gson gson = new Gson();
Reader reader = new InputStreamReader(result);
ResponeItem response = gson.fromJson(reader,
ResponeItem.class);
//You can access all the objects here
List<Item> items = response.items;
List<Category> categories = response.categories;
String category_Timestamp = response.category_Timestamp;
List<Question> questions = response.questions;
String question_Timestamp = response.question_Timestamp;
} else {
Log.e(getClass().getSimpleName(), "Server Error");
}
// Dissmiss your progressbar
}
}
}
import java.io.IOException;
导入java.io.InputStream;
导入java.io.InputStreamReader;
导入java.io.Reader;
导入java.util.List;
导入org.apache.http.HttpEntity;
导入org.apache.http.HttpResponse;
导入org.apache.http.HttpStatus;
导入org.apache.http.client.methods.HttpGet;
导入org.apache.http.impl.client.DefaultHttpClient;
导入com.google.gson.gson;
导入android.app.Activity;
导入android.os.AsyncTask;
导入android.os.Bundle;
导入android.util.Log;
公共课的反应扩展了活动{
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(-Your layout id-)
//初始化
新建NetworkCallTask()。执行(“您的Url”);
}
类NetworkCallTask扩展了AsyncTask{
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
//拿出你的进度条什么的。。
}
@凌驾
受保护的InputStream doInBackground(字符串…url){
DefaultHttpClient=新的DefaultHttpClient();
HttpGet getRequest=新的HttpGet(url[0]);
试一试{
HttpResponse getResponse=client.execute(getRequest);
final int statusCode=getResponse.getStatusLine()
.getStatusCode();
if(statusCode!=HttpStatus.SC\u OK){
Log.w(getClass().getSimpleName(),“错误”+状态码
+“对于URL”+URL[0]);
返回null;
}
HttpEntity getResponseEntity=getResponse.getEntity();
返回getResponseEntity.getContent();
}捕获(IOE异常){
getRequest.abort();
Log.w(getClass().getSimpleName(),“URL错误”+URL[0],e);
}
返回null;
}
@凌驾
受保护的void onPostExecute(InputStream结果){
super.onPostExecute(结果);
如果(结果!=null){
Gson Gson=新的Gson();
Reader Reader=新的InputStreamReader(结果);
ResponeItem response=gson.fromJson(读取器,
响应项(类别);
//您可以访问此处的所有对象
列表项=响应项;
列表类别=response.categories;
字符串category\u Timestamp=response.category\u Timestamp;
列出问题=回答问题;
字符串question\u Timestamp=response.question\u Timestamp;
}否则{
Log.e(getClass().getSimpleName(),“服务器错误”);
}
//我想念你的进度条
}
}
}
使用谷歌库进行JSON表示。您可以为每个JSON元素创建一个Java类,并将JSON字符串表示直接转换为Java对象,这非常简单。下面是反序列化类别列表字符串的示例snnipet:
publicstaticcategorymodel[]反序列化categoriesdata(字符串jsonData)引发异常{
试一试{
d(LOGTAG,“为类别列表反序列化JSON”);
返回setUpGsonBuilder().fromJson(jsonData,CategoryModel[].class);
}捕获(例外e){
e(LOGTAG,“读取类别json时出错”,e);
投掷e;
}
}
下面是java类的分类方式
公共类类别模型{
私有字符串categoryName;
私有字符串类别ShortName;
私有int catid;
私有字符串categoryArabicName;
公共字符串getCategoryName(){
返回类别名称;
}
公共无效setCategoryName(字符串categoryName){
this.categoryName=categoryName;
}
公共字符串getCategoryShortName(){
返回类别ShortName;
}
公众的
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.util.List;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import com.google.gson.Gson;
import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
public class ResponseActivity extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(-Your layout id-)
//Initializations
new NetworkCallTask().execute("Your-Url");
}
class NetworkCallTask extends AsyncTask<String, Void, InputStream> {
@Override
protected void onPreExecute() {
super.onPreExecute();
// Show your progressbar or something..
}
@Override
protected InputStream doInBackground(String... url) {
DefaultHttpClient client = new DefaultHttpClient();
HttpGet getRequest = new HttpGet(url[0]);
try {
HttpResponse getResponse = client.execute(getRequest);
final int statusCode = getResponse.getStatusLine()
.getStatusCode();
if (statusCode != HttpStatus.SC_OK) {
Log.w(getClass().getSimpleName(), "Error " + statusCode
+ " for URL " + url[0]);
return null;
}
HttpEntity getResponseEntity = getResponse.getEntity();
return getResponseEntity.getContent();
} catch (IOException e) {
getRequest.abort();
Log.w(getClass().getSimpleName(), "Error for URL " + url[0], e);
}
return null;
}
@Override
protected void onPostExecute(InputStream result) {
super.onPostExecute(result);
if (result != null) {
Gson gson = new Gson();
Reader reader = new InputStreamReader(result);
ResponeItem response = gson.fromJson(reader,
ResponeItem.class);
//You can access all the objects here
List<Item> items = response.items;
List<Category> categories = response.categories;
String category_Timestamp = response.category_Timestamp;
List<Question> questions = response.questions;
String question_Timestamp = response.question_Timestamp;
} else {
Log.e(getClass().getSimpleName(), "Server Error");
}
// Dissmiss your progressbar
}
}
}
[
{
"items":+[15],
"categories":+[6],
"category_Timestamp":"6/24/2014 1:05:28 PM",
"questions":+[5],
"question_Timestamp":"9/12/2013 3:31:55 PM"
}
]
here is the code to parse entire data
create Core Objects of items and categories and questions as you like..
//for parsing the given json data
private void parseEntireData(String url) throws JSONException {
JSONArray jArray=new JSONArray(url);
String[] metaData={"items","categories","category_Timestamp","questions","question_Timestamp"};
for(int i=0;i<jArray.length();i++){
JSONObject json_data = jArray.getJSONObject(i);
switch(i){
case 0 : parseItems(json_data);break;
case 1 : parseCategories(json_data);break;
case 2: json_data.getString(metaData[i]);break;
case 3: parseQuestion(json_data); break;
case 4: json_data.getString(metaData[i]);break;
}
}
}
// for parsing question
private void parseQuestion(JSONObject json_data) throws JSONException {
JSONArray jArray=json_data.getJSONArray("question");
for(int i=0;i<jArray.length();i++){
// parse data...
String _id=json_data.getString("id");
//......
}
}
// for parsing categories
private void parseCategories(JSONObject json_data) throws JSONException {
JSONArray jArray=json_data.getJSONArray("categories");
for(int i=0;i<jArray.length();i++){
// parse data...
String _id=json_data.getString("categoryName");
//......
}
}
// for parsing items
private void parseItems(JSONObject json_data) throws JSONException {
JSONArray jArray=json_data.getJSONArray("items");
for(int i=0;i<jArray.length();i++){
// parse data...
String _id=json_data.getString("q_id");
//......
}
}