Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/219.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在android中使用url解析这个json数组?_Android_Json_Parsing_Arrays_Jsonobject - Fatal编程技术网

如何在android中使用url解析这个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

我试图解析多个json数组,这些数组由嵌套的json数组组成。我在谷歌上搜索了很多,但不知道该怎么做。我已经完成了下面的代码,但它没有给我所有的值

到目前为止,我已经完成了此编码,
结果
字符串显示
项目数组
,而
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");
            //......
        }
    }