如何在android中获取jsonObject的值?

时间:2022-08-06 20:24:56

I am building an android application and I am new to json. I am fetching below josn formate -

我正在构建一个android应用程序,我是json的新手。我正在取下josn formate。

{
    "contact"[
        {
            "key1": "hey1",
            "key2": [
                {
                    "key3": "hey2"
                }
            ]
        }
    ]
}

I am using below code to fetch key1 value. Now problem I am facing is how to fetch key3 value -

我正在使用下面的代码来获取key1值。现在我面临的问题是如何获取key3值-

jsonString = http.makeServiceCall(url, ServiceHandler.GET, null);
if (jsonString != null) {
    try {
        JSONObject jsonObj = new JSONObject(jsonString);

        // Getting JSON Array node
        questions = jsonObj.getJSONArray(TAG_CONTACTS);
        for (int i = 0; i < questions.length(); i++) {
            temp_obj = questions.getJSONObject(i);
            key1Array.add(temp_obj.getString("key1").toString());
        }
    } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
    }
}

Please help me

请帮我

3 个解决方案

#1


1  

If you want to use Gson to parse your json data. Let try it:

如果您想使用Gson解析json数据。我们试一试:

First of all, you must modify your json like this:

首先,您必须这样修改json:

{
    "contact":[
        {
            "key1": "hey1",
            "key2": [
                {
                    "key3": "hey2"
                }
            ]
        }
    ]
}

Second add Gson to your libs and sync build.gradle: download here extract it, and copy/past gson-2.2.4.gson to libs folder.

第二个添加Gson到您的libs和同步构建。gradle:在这里下载,然后复制/通过gson-2.2.4。gson库文件夹。

Third Create some class:

第三个创建一些类:

FullContents.java:

FullContents.java:

public class FullContents {
    private List<ObjectKey> contact;

    public List<ObjectKey> getContact() {
        return contact;
    }

    public void setContact(List<ObjectKey> contact) {
        this.contact = contact;
    }
}

ObjectKey.java:

ObjectKey.java:

public class ObjectKey {
    private String key1;

    private List<ObjectKey3> key2;

    public List<ObjectKey3> getKey2() {
        return key2;
    }

    public void setKey2(List<ObjectKey3> key2) {
        this.key2 = key2;
    }

    public String getKey1(){
        return key1;
    }
    public void setKey1(String key1){
        this.key1 = key1;
    }
}

ObjectKey3.java:

ObjectKey3.java:

public class ObjectKey3 {
    private String key3;
    public String getKey3(){
        return key3;
    }
    public void setKey3(String key3){
        this.key3 = key3;
    }
}

And Finally, get data from url:

最后,从url获取数据:

 private class ParseByGson extends AsyncTask<String,Void,FullContents> {
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
    }

    @Override
    protected FullContents doInBackground(String... params) {
        FullContents fullContents = null;
        try {
            URL url=new URL(params[0]);
            InputStreamReader reader=new InputStreamReader(url.openStream(),"UTF-8");
            fullContents=new Gson().fromJson(reader,FullContents.class);
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return fullContents;
    }

    @Override
    protected void onProgressUpdate(Void... values) {
        super.onProgressUpdate(values);
    }

    @Override
    protected void onPostExecute(FullContents results) {
        super.onPostExecute(results);
        ObjectKey objectKey = results.getContact().get(0);
        Log.e(">>",objectKey.getKey1()+"--");
    }
}

you can put below code to onCreate:

您可以将下面的代码放置到onCreate:

ParseByGson parseByGson = new ParseByGson();
parseByGson.execute(urlStringHere);

Update: Explain

更新:解释

如何在android中获取jsonObject的值?

#2


0  

1st of all: your json appears to be not valid (missing ':' after "content");

首先:您的json似乎无效(缺少':' after "content");

After reviewing thins:

在回顾稀释:

You can use the named getters to retrieve many types of results (object, int, string, etc);

您可以使用命名getter来检索许多类型的结果(对象、int、字符串等);

JSONObject contact = jsonObj.getJSONObject("contact"); // {"key1":"hey1","key2":[{"key3":"hey2"}]}

or

String key1 = jsonObj.getString("key1"); // hey1

To retrieve key3, you should use:

要检索key3,您应该使用:

JSONObject contact = jsonObj.getJSONObject("contact");
JSONObject key2 = contact.getJSONObject("key2");
String key3 = key2.getString("key3");

#3


0  

Adapt the following code to what you are coding

调整以下代码以适应您正在编写的代码

for (int i = 0; i < questions.length(); i++) {
   temp_obj = questions.getJSONObject(i);

   key1Array.add(temp_obj.getString("key1"));

   JSONObject temp_objKey2 = temp_obj.getJSONObject("key2");

   Key2Object key2Object = new Key2Object();

   key2Object.add(temp_objKey2.getString("key3"));

   key1Array.add(key2Object);

}

#1


1  

If you want to use Gson to parse your json data. Let try it:

如果您想使用Gson解析json数据。我们试一试:

First of all, you must modify your json like this:

首先,您必须这样修改json:

{
    "contact":[
        {
            "key1": "hey1",
            "key2": [
                {
                    "key3": "hey2"
                }
            ]
        }
    ]
}

Second add Gson to your libs and sync build.gradle: download here extract it, and copy/past gson-2.2.4.gson to libs folder.

第二个添加Gson到您的libs和同步构建。gradle:在这里下载,然后复制/通过gson-2.2.4。gson库文件夹。

Third Create some class:

第三个创建一些类:

FullContents.java:

FullContents.java:

public class FullContents {
    private List<ObjectKey> contact;

    public List<ObjectKey> getContact() {
        return contact;
    }

    public void setContact(List<ObjectKey> contact) {
        this.contact = contact;
    }
}

ObjectKey.java:

ObjectKey.java:

public class ObjectKey {
    private String key1;

    private List<ObjectKey3> key2;

    public List<ObjectKey3> getKey2() {
        return key2;
    }

    public void setKey2(List<ObjectKey3> key2) {
        this.key2 = key2;
    }

    public String getKey1(){
        return key1;
    }
    public void setKey1(String key1){
        this.key1 = key1;
    }
}

ObjectKey3.java:

ObjectKey3.java:

public class ObjectKey3 {
    private String key3;
    public String getKey3(){
        return key3;
    }
    public void setKey3(String key3){
        this.key3 = key3;
    }
}

And Finally, get data from url:

最后,从url获取数据:

 private class ParseByGson extends AsyncTask<String,Void,FullContents> {
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
    }

    @Override
    protected FullContents doInBackground(String... params) {
        FullContents fullContents = null;
        try {
            URL url=new URL(params[0]);
            InputStreamReader reader=new InputStreamReader(url.openStream(),"UTF-8");
            fullContents=new Gson().fromJson(reader,FullContents.class);
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return fullContents;
    }

    @Override
    protected void onProgressUpdate(Void... values) {
        super.onProgressUpdate(values);
    }

    @Override
    protected void onPostExecute(FullContents results) {
        super.onPostExecute(results);
        ObjectKey objectKey = results.getContact().get(0);
        Log.e(">>",objectKey.getKey1()+"--");
    }
}

you can put below code to onCreate:

您可以将下面的代码放置到onCreate:

ParseByGson parseByGson = new ParseByGson();
parseByGson.execute(urlStringHere);

Update: Explain

更新:解释

如何在android中获取jsonObject的值?

#2


0  

1st of all: your json appears to be not valid (missing ':' after "content");

首先:您的json似乎无效(缺少':' after "content");

After reviewing thins:

在回顾稀释:

You can use the named getters to retrieve many types of results (object, int, string, etc);

您可以使用命名getter来检索许多类型的结果(对象、int、字符串等);

JSONObject contact = jsonObj.getJSONObject("contact"); // {"key1":"hey1","key2":[{"key3":"hey2"}]}

or

String key1 = jsonObj.getString("key1"); // hey1

To retrieve key3, you should use:

要检索key3,您应该使用:

JSONObject contact = jsonObj.getJSONObject("contact");
JSONObject key2 = contact.getJSONObject("key2");
String key3 = key2.getString("key3");

#3


0  

Adapt the following code to what you are coding

调整以下代码以适应您正在编写的代码

for (int i = 0; i < questions.length(); i++) {
   temp_obj = questions.getJSONObject(i);

   key1Array.add(temp_obj.getString("key1"));

   JSONObject temp_objKey2 = temp_obj.getJSONObject("key2");

   Key2Object key2Object = new Key2Object();

   key2Object.add(temp_objKey2.getString("key3"));

   key1Array.add(key2Object);

}