2013-09-24 2 views
58

У меня возникли проблемы с поиском способа разбора JSONArray. Это выглядит следующим образом:Как разобрать JSON Array (Not Json Object) в Android

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

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

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

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

Большое спасибо!

+1

Попробуйте это, чтобы узнать, действительно ли ваш json http://json.parser.online.fr/ –

+0

Вы используете любую библиотеку для разбора json? Используйте gson-библиотеку для разбора json.Much Helpfull. – nilkash

+0

Действительно. Я проанализировал его в приложении, которое я сделал для iPhone. И он работает. Я просто не знаю, как это сделать в Android – SteBra

ответ

93

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

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

+0

только один вопрос, если jsonarray включает такие числа, как [2]. [4] и что число внутри внутри снова включает массив, поэтому, если я хочу извлечь из него, скажем, что массив, вложенный в числовой [4] в java-код, должен написать int i = 4 ??? – BiggDawgg

+0

@BiggDawgg: Рад, что это помогло вам. Отправьте свой вопрос в отдельном потоке с данными JSON, чтобы мне было легко ответить. –

9

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

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/

+0

Я предполагаю, что этот «вход» будет URL-адресом этого json? или это что-то еще? – SteBra

+0

@Stebra. Точно, я включил это как комментарий в код. –

+0

Это очень простое решение.Он должен быть принят в моем представлении. – FabioC

3

@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()); 
+1

. Переменная результата - это ваша строка JSONArray. – nilkash

+0

. Будет ли переменная result быть url. Мне нужно получить json из уже выбранного json? – SteBra

+1

строка результата уже выбрана JSONArray строка – nilkash

5

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

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

Это один объект: { "имя": "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"); 


} 
+0

Вы попробовали это? – TharakaNirmana

+0

Мне трудно получить мою JSONstring из URL. Возможно, вы могли бы с этим справиться? – SteBra

+0

Пришлите мне URL – TharakaNirmana

18
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 
21

Я просто дать немного Jackson пример:

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

Можете ли вы привести пример, как я могу получить JSON в виде строки из url, которую я имею, пожалуйста? – SteBra

+2

Weeell вот что-то, что я составил: http://pastebin.com/w4thyPVK – vilpe89

+1

'execute-method' DefaultHttpClient - это блокирующий вызов, поэтому это нужно сделать в фоновом задании, просто чтобы понять, почему он находится в отдельный класс. – vilpe89

2

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

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

1

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

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

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

+0

ps "jsonObject.getString (" messages ")" type is jsonArray; первый есть ответ невозможно преобразовать строку в jsonArray; Я исправлю это. –

-4

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

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

}

+1

Неправильный язык. –

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