2015-02-26 3 views
0

Это то, что выглядит как JSON:Синтаксический JSON массив и объект в Android

[{ 
    "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" 
     } 
    ] 
}] 

Я пытаюсь разобрать его с помощью следующего кода Java в Android:

JSONObject jObj = NULL; try { jObj = новый 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.

Кроме того, если в массив было несколько частей, как мы можем убедиться, что каждый из них распечатан?

ответ

7

Ваша строка 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 Parsing Tutorial

+0

Это печатает один результат, спасибо за это. Мне интересно, если это не так много ... как я могу распечатать все записи, если есть несколько prop_id, например? –

+0

это для цикла, поэтому вы можете добавить все данные в список –

+0

Хорошо, что если JSON был [{"pmid": "2", "name": "MANAGEMENT", "result": "1", "properties" : [{"prop_id": "32", "prop_name": "Tower", "address": "281 Lakeshore", "city": "Euclid", "state": "OH", "zip": "44142 », "LAT": "54,5", "длинные": "- 81.5034"}]}, { "PMID": "1", "название": "один", "результат": "18", "свойства" : [{«prop_id»: «3», «prop_name»: «Chase», «address»: «146 Goon Blvd.», «city»: «City», «state»: «OH», «zip»: «12345», «lat»: «46.35», «long»: «- 83.1138»}, {«prop_id»: «6», «prop_name»: «Club Apartments», «адрес»: «4600 Barrington Club», "город": "Коламбус", "государство": "ОН", "молния": "43520", "ш": "40,436", "длинный": "- 83,048"}]}] –

1

Как и в публикуемую JSon Строка jsonStr является JSONArray из JSONObeject-х вместо JOSNObject из JSONArray.

Так конвертировать jsonStr строки в 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); 
0

в этом exammple детали объекта содержат данные J сын

    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); 
        } 
0

Корневой объект является массив JSON [], не JSON объект {} там. Итак, вам нужно

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

Остальная часть кода будет работать нормально обрабатывать jObj как JSONObject. Концепция здесь точно такая же, как и то, что вы делаете для своего массива JSON properties.

0

использование этого

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(); 
     } 
2

Вот полный пример с разрешением.

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(); 
    } 
} 

} 
Смежные вопросы