Конвертировать массив Json в обычный массив Java - PullRequest
123 голосов
/ 03 августа 2010

Есть ли способ конвертировать JSON Array в обычный Java Array для привязки данных Android ListView?

Ответы [ 13 ]

177 голосов
/ 03 августа 2010
ArrayList<String> list = new ArrayList<String>();     
JSONArray jsonArray = (JSONArray)jsonObject; 
if (jsonArray != null) { 
   int len = jsonArray.length();
   for (int i=0;i<len;i++){ 
    list.add(jsonArray.get(i).toString());
   } 
} 
54 голосов
/ 03 августа 2010

Если у вас еще нет объекта JSONArray, вызовите

JSONArray jsonArray = new JSONArray(jsonArrayString);

Затем просто переберите это, создав собственный массив. Этот код предполагает, что это массив строк, его нетрудно изменить, чтобы он соответствовал вашей конкретной структуре массива.

List<String> list = new ArrayList<String>();
for (int i=0; i<jsonArray.length(); i++) {
    list.add( jsonArray.getString(i) );
}
11 голосов
/ 29 декабря 2014

Вместо использования встроенной библиотеки org.json, попробуйте использовать Джексона или GSON, где это одна строка. С Джексоном, например:

List<String> list = new ObjectMapper().readValue(json, List.class);
// Or for array:
String[] array = mapper.readValue(json, String[].class);
10 голосов
/ 22 ноября 2012

Возможно, это всего лишь обходной путь (не очень эффективный), но вы можете сделать что-то вроде этого:

String[] resultingArray = yourJSONarray.join(",").split(",");

Очевидно, вы можете изменить разделитель ',' любымкак (у меня было JSONArray адресов электронной почты)

4 голосов
/ 09 июля 2015

Использование может использовать String[] вместо ArrayList<String>:

Это уменьшит накладные расходы памяти, которые имеет ArrayList

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

String[] stringsArray = new String[jsonArray.length()];
for (int i = 0; i < jsonArray.length; i++) {
    parametersArray[i] = parametersJSONArray.getString(i);
}
0 голосов
/ 21 мая 2019

Я знаю, что вопрос был за Java. Но я хочу поделиться возможным решением для Kotlin, потому что считаю его полезным.

С Kotlin вы можете написать функцию расширения, которая преобразует JSONArray в собственный (Kotlin) массив:

fun JSONArray.asArray(): Array<Any> {
    return Array(this.length()) { this[it] }
}

Теперь вы можете вызывать asArray() напрямую для JSONArray экземпляра.

0 голосов
/ 18 января 2019

Мы можем просто преобразовать JSON в читаемую строку и разделить ее с помощью метода split класса String.

String jsonAsString = yourJsonArray.toString();
//we need to remove the leading and the ending quotes and square brackets
jsonAsString = jsonAsString.substring(2, jsonAsString.length() -2);
//split wherever the String contains ","
String[] jsonAsStringArray = jsonAsString.split("\",\"");
0 голосов
/ 07 января 2019

   private String[] getStringArray(JSONArray jsonArray) throws JSONException {
            if (jsonArray != null) {
                String[] stringsArray = new String[jsonArray.length()];
                for (int i = 0; i < jsonArray.length(); i++) {
                    stringsArray[i] = jsonArray.getString(i);
                }
                return stringsArray;
            } else
                return null;
        }
0 голосов
/ 23 июня 2017

Вы можете использовать String[] вместо ArrayList<String>:

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

   private String[] getStringArray(JSONArray jsonArray) throws JSONException {
            if (jsonArray != null) {
                String[] stringsArray = new String[jsonArray.length()];
                for (int i = 0; i < jsonArray.length(); i++) {
                    stringsArray[i] = jsonArray.getString(i);
                }
                return stringsArray;
            } else
                return null;
        }
0 голосов
/ 09 ноября 2016

мы начинаем с преобразования [JSONArray -> List ]

public static List<JSONObject> getJSONObjectListFromJSONArray(JSONArray array) 
        throws JSONException {
  ArrayList<JSONObject> jsonObjects = new ArrayList<>();
  for (int i = 0; 
           i < (array != null ? array.length() : 0);           
           jsonObjects.add(array.getJSONObject(i++)) 
       );
  return jsonObjects;
}

затем создаем универсальную версию, заменяя array.getJSONObject (i ++) на POJO

пример:

public <T> static List<T> getJSONObjectListFromJSONArray(Class<T> forClass, JSONArray array) 
        throws JSONException {
  ArrayList<Tt> tObjects = new ArrayList<>();
  for (int i = 0; 
           i < (array != null ? array.length() : 0);           
           tObjects.add( (T) createT(forClass, array.getJSONObject(i++))) 
       );
  return tObjects;
}

private static T createT(Class<T> forCLass, JSONObject jObject) {
   // instantiate via reflection / use constructor or whatsoever 
   T tObject = forClass.newInstance(); 
   // if not using constuctor args  fill up 
   // 
   // return new pojo filled object 
   return tObject;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...