JSONArray для строкового массива

Похоже, слишком много boilterplate для преобразования json-массива в строку []. Есть ли более простой и элегантный способ?

final JSONArray keyArray = input.getJSONArray("key");
String[] keyAttributes = new String[keyArray.length()];
for(int i = 0; i < keyArray.length(); i++) {
    keyAttributes[i] = keyArray.getString(i);
}

Ответ 1

Используйте gson. Он получил гораздо более дружественный API, чем org.json.

Примеры коллекций (из Руководство пользователя):

Gson gson = new Gson();
Collection<Integer> ints = Lists.immutableList(1,2,3,4,5);

//(Serialization)
String json = gson.toJson(ints); ==> json is [1,2,3,4,5]

//(Deserialization)
Type collectionType = new TypeToken<Collection<Integer>>(){}.getType();
Collection<Integer> ints2 = gson.fromJson(json, collectionType);
//ints2 is same as ints

Ответ 2

Это некрасиво, но верьте этому или нет, это работает, но только для элементов, которые не имеют запятых:

String[] keyAttributes = keyArray.toString.substring(1,keyArray.toString.length-1).replaceAll("\"","").split(",")

см. комментарий SK9 ниже, EG: "[\",\", \"a,b\"]" будет неправильно проанализирован как ["", "", "a", "b"] вместо [",", "a,b"]

Ответ 3

public String[] jsonArrayToStringArray(JSONArray jsonArray) {
    int arraySize = jsonArray.size();
    String[] stringArray = new String[arraySize];

    for(int i=0; i<arraySize; i++) {
        stringArray[i] = (String) jsonArray.get(i);
    }

    return stringArray;
};

Ответ 4

Нет никакого встроенного метода, который сделает это, и я думаю, что это самый простой способ

Вот аналогичная тема, которая поможет вам

Ответ 5

Вы правы! Даже ответ @Sean Patrick Floyd является слишком большим, чтобы скрыть массив JSON до строки [] или любого другого класса массива. Скорее это то, что я считаю элегантным:

JsonArray jsonArray = input.getAsJsonArray("key");

Gson gson = new Gson();
String[] output = gson.fromJson(jsonArray , String[].class)

ПРИМЕЧАНИЕ 1: JsonArray должен быть массивом строк для приведенного выше примера без каких-либо имен свойств. Например:

{key:["Apple","Orange","Mango","Papaya","Guava"]}

Примечание 2: JsonObject класс, используемый выше, из библиотеки com.google.gson, а не класса JsonObject из библиотеки org.json.