簡體   English   中英

在Android中解析JSON數組和對象

[英]Parsing JSON array and object in Android

JSON如下所示:

[{
    "pmid": "2",
    "name": " MANAGEMENT",
    "result": "1",
    "properties": [
        {
            "prop_id": "32",
            "prop_name": "Bonneville",
            "address": "122 Lakeshore",
            "city": "Ripley",
            "state": "OH",
            "zip": "11454",
            "lat": "41.123",
            "long": "-85.5034"
        }
    ]
}]

我試圖用Android中的以下Java代碼解析它:

JSONObject jObj = null; 嘗試{jObj = new JSONObject(jsonStr);

    // We get weather info (This is an array)
    JSONArray jArr = jObj.getJSONArray("properties");

    // We use only the first value
    //JSONObject JSONWeather = jArr.getJSONObject(0);
    JSONObject c = jArr.getJSONObject(0);
    String name = c.getString(TAG_NAME);
    String email = c.getString(TAG_EMAIL);
    String phone = c.getString(TAG_PHONE);
} catch (JSONException e) {
    e.printStackTrace();
}

return null;

我沒有得到任何結果。 如何成功解析此JSON? 我正在使用Android Studio。

另外,如果陣列中有多個零件,我們如何確保將每個零件都打印出來?

您的JSON字符串以JSONArray開頭。

在這里示例代碼,嘗試一下。

    JSONArray mJsonArray = new JSONArray(jsonStr);
    JSONObject mJsonObject = mJsonArray.getJSONObject(0);

    String pmid = mJsonObject.getString("pmid");
    String name = mJsonObject.getString("name");
    String result = mJsonObject.getString("result");


    JSONArray mJsonArrayProperty = mJsonObject.getJSONArray("properties");
    for (int i = 0; i < mJsonArrayProperty.length(); i++) {
        JSONObject mJsonObjectProperty = mJsonArrayProperty.getJSONObject(i);

        String prop_id = mJsonObjectProperty.getString("prop_id");
        String prop_name = mJsonObjectProperty.getString("prop_name");
        String address = mJsonObjectProperty.getString("address");
        String city = mJsonObjectProperty.getString("city");
        String state = mJsonObjectProperty.getString("state");
        String zip = mJsonObjectProperty.getString("zip");
        String lat = mJsonObjectProperty.getString("lat");
        String lon = mJsonObjectProperty.getString("long");
    }

檢查Android JSON解析教程

這是帶有解析度的完整示例。

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;


public class Test {

public static void main(String[] args) 
{
     JSONObject jObj = null;
    try {
        String jsonStr = "[{\"pmid\":\"2\",\"name\":\" MANAGEMENT\",\"result\":\"1\",\"properties\":[{\"prop_id\":\"32\",\"prop_name\":\"Bonneville\",\"address\":\"122 Lakeshore\",\"city\":\"Ripley\",\"state\":\"OH\",\"zip\":\"11454\",\"lat\":\"41.123\",\"long\":\"-85.5034\"}]}]";
        jsonStr = jsonStr.substring(1, jsonStr.length()-1);
          System.out.println(jsonStr);
        jObj = new JSONObject(jsonStr);



        System.out.println("pmid="+jObj.get("pmid"));
        System.out.println("name="+jObj.get("name"));
        System.out.println("result="+jObj.get("result"));


        JSONArray jArr = jObj.getJSONArray("properties");

        JSONObject c = jArr.getJSONObject(0);

        System.out.println("prop_id=="+c.get("prop_id"));
        System.out.println("prop_name=="+c.get("prop_name"));
        System.out.println("address=="+c.get("address"));
        System.out.println("city=="+c.get("city"));
        System.out.println("state=="+c.get("state"));
        System.out.println("zip=="+c.get("zip"));
        System.out.println("lat=="+c.get("lat"));
        System.out.println("long=="+c.get("long"));


    } catch (JSONException e) 
    {
        e.printStackTrace();
    }
}

}

如發布的json字符串jsonStrJSONObeject的JSONArray而不是JSONArray的JOSNObject

因此將jsonStr String轉換為JSONArray

JSONArray jArray = new JSONArray(jsonStr);
JSONObject c = jArray.getJSONObject(0);
// get properties JSONArray from c
 JSONArray jArrProperties = c.getJSONArray("properties");
 JSONObject jsonObject = jArrProperties.getJSONObject(0);

在此詳細信息對象中包含兒子數據

                  JSONObject details = mJSONParser.doInBackground(); //json object                
                  Child_Registration_StaticData deta=new Child_Registration_StaticData();
                    try
                    {
                        deta.UniqueID = details.getString("UniqueID");
                        deta.Nameofchild= details.getString("Nameofchild");
                        deta.FatherName= details.getString("FatherName");
                        deta.DOB= details.getString("DOB");

                        child_name.setText(deta.Nameofchild);
                        father_name.setText(deta.FatherName);
                        dateof_birth.setText(deta.FatherName);
                    }

您的根對象是JSON數組[] ,而不是JSON對象{} 所以,你需要

jObj = new JSONArray(jsonStr);
jObj = jObj.getJSONObject(0);

現在,將jObj視為JSONObject可以正常工作。 這里的概念與您對properties JSON數組所做的完全相同。

用這個

try {
            JSONArray array0 = new JSONArray(Sample);
            JSONObject object0 = array0.getJSONObject(0);
            JSONArray array1 = object0.getJSONArray("properties");
            JSONObject object1 = array1.getJSONObject(0);
            String name = object1.getString("prop_name");


        } catch (JSONException e) {
            e.printStackTrace();
        }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM