Как разбирать JSON Array (не Json Object) в Android

У меня есть проблема с поиском способа разбора JSONArray. Это выглядит так:

[{"name":"name1","url":"url1"},{"name":"name2","url":"url2"},...] 

Я знаю, как разбирать его, если JSON был написан по-разному (другими словами, если бы я возвращал объект json вместо массива объектов). Но это все, что у меня есть, и мне нужно идти с ним.

* EDIT: Это действительный json. Я сделал приложение для iPhone, используя этот json, теперь мне нужно сделать это для Android и не могу понять. Есть много примеров, но все они связаны с JSONObject. Мне нужно что-то для JSONArray.

Может кто-нибудь, пожалуйста, дайте мне какой-нибудь намек или учебник или пример?

Очень признателен !

Solutions Collecting From Web of "Как разбирать JSON Array (не Json Object) в Android"

Используйте следующий фрагмент для разбора JsonArray.

 JSONArray jsonarray = new JSONArray(jsonStr); for (int i = 0; i < jsonarray.length(); i++) { JSONObject jsonobject = jsonarray.getJSONObject(i); String name = jsonobject.getString("name"); String url = jsonobject.getString("url"); } 

Надеюсь, поможет.

Я просто приведу небольшой пример Джексона :

Сначала создайте держатель данных, у которого есть поля из строки JSON

 // imports // ... @JsonIgnoreProperties(ignoreUnknown = true) public class MyDataHolder { @JsonProperty("name") public String mName; @JsonProperty("url") public String mUrl; } 

И проанализируйте список MyDataHolders

 String jsonString = // your json ObjectMapper mapper = new ObjectMapper(); List<MyDataHolder> list = mapper.readValue(jsonString, new TypeReference<ArrayList<MyDataHolder>>() {}); 

Использование элементов списка

 String firstName = list.get(0).mName; String secondName = list.get(1).mName; 
 public static void main(String[] args) throws JSONException { String str = "[{\"name\":\"name1\",\"url\":\"url1\"},{\"name\":\"name2\",\"url\":\"url2\"}]"; JSONArray jsonarray = new JSONArray(str); for(int i=0; i<jsonarray.length(); i++){ JSONObject obj = jsonarray.getJSONObject(i); String name = obj.getString("name"); String url = obj.getString("url"); System.out.println(name); System.out.println(url); } } 

Вывод:

 name1 url1 name2 url2 

Создайте класс для хранения объектов.

 public class Person{ private String name; private String url; //Get & Set methods for each field } 

Затем десериализуйте следующим образом:

 Gson gson = new Gson(); Person[] person = gson.fromJson(input, Person[].class); //input is your String 

Ссылка: http://blog.patrickbaumann.com/2011/11/gson-array-deserialization/

В этом примере в одном массиве json имеется несколько объектов. То есть,

Это json-массив: [{"name": "name1", "url": "url1"}, {"name": "name2", "url": "url2"}, …]

Это один объект: {"name": "name1", "url": "url1"}

Предполагая, что вы получили результат для переменной String, называемой jSonResultString:

 JSONArray arr = new JSONArray(jSonResultString); //loop through each object for (int i=0; i<arr.length(); i++){ JSONObject jsonProductObject = arr.getJSONObject(i); String name = jsonProductObject.getString("name"); String url = jsonProductObject.getString("url"); } 

@Stebra См. Этот пример. Это может вам помочь.

 public class CustomerInfo { @SerializedName("customerid") public String customerid; @SerializedName("picture") public String picture; @SerializedName("location") public String location; public CustomerInfo() {} } 

И когда вы получите результат; Синтаксический анализ

 List<CustomerInfo> customers = null; customers = (List<CustomerInfo>)gson.fromJson(result, new TypeToken<List<CustomerInfo>>() {}.getType()); 

Несколько замечательных предложений уже упомянуты. Использование GSON действительно действительно действительно, и сделать жизнь еще проще, вы можете попробовать этот сайт. Это называется jsonschema2pojo и делает именно это:

Вы даете ему свой json, и он генерирует объект java, который может вставляться в ваш проект. Вы можете выбрать GSON для аннотации ваших переменных, поэтому извлечение объекта из вашего json станет еще проще!

Мой пример загрузки с сервера.

 int jsonLength = Integer.parseInt(jsonObject.getString("number_of_messages")); if (jsonLength != 1) { for (int i = 0; i < jsonLength; i++) { JSONArray jsonArray = new JSONArray(jsonObject.getString("messages")); JSONObject resJson = (JSONObject) jsonArray.get(i); //addItem(resJson.getString("message"), resJson.getString("name"), resJson.getString("created_at")); } 

Надеюсь, что это поможет

  URL url = new URL("your URL"); connection = (HttpURLConnection) url.openConnection(); connection.connect(); InputStream stream = connection.getInputStream(); BufferedReader reader; reader = new BufferedReader(new InputStreamReader(stream)); StringBuffer buffer = new StringBuffer(); String line = ""; while ((line = reader.readLine()) != null) { buffer.append(line); } //setting the json string String finalJson = buffer.toString(); //this is your string get the pattern from buffer. JSONArray jsonarray = new JSONArray(finalJson); 

Старый пост, который я знаю, но если я не понял этот вопрос, это должно сделать трюк:

 s = '[{"name":"name1","url":"url1"},{"name":"name2","url":"url2"}]'; eval("array=" + s); for (var i = 0; i < array.length; i++) { for (var index in array[i]) { alert(array[i][index]); } 

}