JSONArray转换为字符串数组

15

看起来将JSON数组转换为string[]的样板代码太多了。 有没有更简单和优雅的方法?

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
假设使用 org.json.JSONArray。不,这就是最好的了。 - Dean Povey
4个回答

7
使用 gson。它比 org.json 有更友好的 API。 集合示例(来自用户指南):
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
谢谢。int[] ints2 = gson.fromJson("[1,2,3,4,5]", int[].class); 我正在寻找类似这样的东西。 - Fakrudeen

1

你说得对!即使@Sean Patrick Floyd's的答案也有太多样板代码来将JSON数组转换为string[]或任何其他类型的数组类。相反,以下是我发现优雅的方法:

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库,而不是来自于org.json库的JSONObject类。


0
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;
};

提问者希望避免这种情况,并在问题中发布了完全相同的片段。 - Rohit

0

目前没有任何内置方法可以做到这一点,我认为这是最简单的方法。

这里有一个类似主题,可以帮助你。


对我来说,即使使用一个“知名”的库也可以。 - Fakrudeen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接