it-swarm.com.ru

Как проанализировать массив JSON (не объект Json) в Android

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

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

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

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

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

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

77
SteBra

используйте следующий фрагмент для анализа 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");
}

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

125
Spring Breaker

Я просто приведу немного Джексон пример:

Сначала создайте держатель данных, который имеет поля из строки 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;
25
vilpe89
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
19
Maxim Shoustin

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

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/

11
Kevin Bowersox

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

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

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

Предполагая, что вы получили результат в строковую переменную с именем 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");


}
5
TharakaNirmana

@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());
3
nilkash

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

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

2
TomCB

Мой случай Загрузка с сервера Пример ..

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

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

1
bong jae choe