Как разбирать JSON Array (не Json Object) в Android
У меня есть проблема с поиском способа разбора JSONArray.
Это выглядит так:
[{"name":"name1","url":"url1"},{"name":"name2","url":"url2"},...]
Я знаю, как разбирать его, если JSON был написан по-разному (другими словами, если бы я возвращал объект json вместо массива объектов).
Но все, что у меня есть, и мне нужно идти с ним.
* EDIT: Это действительный json. Я сделал приложение для iPhone, используя этот json, теперь мне нужно сделать это для Android и не могу понять.
Есть много примеров, но все они связаны с JSONObject. Мне нужно что-то для JSONArray.
Может кто-нибудь, пожалуйста, дайте мне подсказку или учебник или пример?
Очень ценно!
Ответы
Ответ 1
используйте следующий фрагмент для разбора 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");
}
Надеюсь, что это поможет.
Ответ 2
Я просто приведу пример 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;
Ответ 3
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
Ответ 4
Создайте класс для хранения объектов.
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/
Ответ 5
В этом примере в одном массиве 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");
}
Ответ 6
@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());
Ответ 7
Несколько замечательных предложений уже упомянуты.
Использование GSON действительно действительно полезно, и чтобы еще проще сделать жизнь, вы можете попробовать этот веб-сайт
Он называется jsonschema2pojo и делает именно это:
Вы даете ему свой json, и он генерирует объект java, который может вставляться в ваш проект.
Вы можете выбрать GSON для аннотирования переменных, поэтому извлечение объекта из вашего json станет еще проще!
Ответ 8
Мой случай
Загрузка с примера сервера.
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"));
}
Надеюсь, что это поможет
Ответ 9
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);
Ответ 10
Старый пост, который я знаю, но если я не понял этот вопрос, это должно сделать трюк:
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]);
}
}