转换 JSONArray 到 String Array

我想问一个关于在 Android上将 jsonArray转换为 StringArray的问题。这是我从服务器获取 jsonArray的代码。

try {
DefaultHttpClient defaultClient = new DefaultHttpClient();
HttpGet httpGetRequest = new HttpGet("http://server/android/listdir.php");
HttpResponse httpResponse = defaultClient.execute(httpGetRequest);


BufferedReader reader = new BufferedReader(new InputStreamReader(httpResponse.getEntity().getContent(),"UTF-8"));


String json = reader.readLine();


//JSONObject jsonObject = new JSONObject(json);
JSONArray jsonArray = new JSONArray(json);
Log.d("", json);


//Toast.makeText(getApplicationContext(), json, Toast.LENGTH_SHORT).show();


} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

这是 JSON

[
{"name": "IMG_20130403_140457.jpg"},
{"name":"IMG_20130403_145006.jpg"},
{"name":"IMG_20130403_145112.jpg"},
{"name":"IMG_20130404_085559.jpg"},
{"name":"IMG_20130404_113700.jpg"},
{"name":"IMG_20130404_113713.jpg"},
{"name":"IMG_20130404_135706.jpg"},
{"name":"IMG_20130404_161501.jpg"},
{"name":"IMG_20130405_082413.jpg"},
{"name":"IMG_20130405_104212.jpg"},
{"name":"IMG_20130405_160524.jpg"},
{"name":"IMG_20130408_082456.jpg"},
{"name":"test.jpg"}
]

如何将 jsonArray 转换为 StringArray,以便像下面这样得到 StringArray:

array = {"IMG_20130403_140457.jpg","IMG_20130403_145006.jpg",........,"test.jpg"};

谢谢你的帮助:)

278560 次浏览

可怕可怕的黑客行为:

String[] arr = jsonArray.toString().replace("},{", " ,").split(" ");

看看这个 教程。 也可以像下面这样解析 json:

JSONArray arr = new JSONArray(yourJSONresponse);
List<String> list = new ArrayList<String>();
for(int i = 0; i < arr.length(); i++){
list.add(arr.getJSONObject(i).getString("name"));
}

可以循环创建 String

List<String> list = new ArrayList<String>();
for (int i=0; i<jsonArray.length(); i++) {
list.add( jsonArray.getString(i) );
}
String[] stringArray = list.toArray(new String[list.size()]);

密码如下:

// XXX satisfies only with this particular string format
String s = "[{\"name\":\"IMG_20130403_140457.jpg\"},{\"name\":\"IMG_20130403_145006.jpg\"},{\"name\":\"IMG_20130403_145112.jpg\"},{\"name\":\"IMG_20130404_085559.jpg\"},{\"name\":\"IMG_20130404_113700.jpg\"},{\"name\":\"IMG_20130404_113713.jpg\"},{\"name\":\"IMG_20130404_135706.jpg\"},{\"name\":\"IMG_20130404_161501.jpg\"},{\"name\":\"IMG_20130405_082413.jpg\"},{\"name\":\"IMG_20130405_104212.jpg\"},{\"name\":\"IMG_20130405_160524.jpg\"},{\"name\":\"IMG_20130408_082456.jpg\"},{\"name\":\"test.jpg\"}]";
s = s.replace("[", "").replace("]", "");
s = s.substring(1, s.length() - 1);
String[] split = s.split("[}][,][{]");
for (String string : split) {
System.out.println(string);
}
public static String[] getStringArray(JSONArray jsonArray) {
String[] stringArray = null;
if (jsonArray != null) {
int length = jsonArray.length();
stringArray = new String[length];
for (int i = 0; i < length; i++) {
stringArray[i] = jsonArray.optString(i);
}
}
return stringArray;
}

这就对了:

String tempNames = jsonObj.names().toString();
String[] types = tempNames.substring(1, tempNames.length()-1).split(","); //remove [ and ] , then split by ','

最简单正确的代码是:

public static String[] toStringArray(JSONArray array) {
if(array==null)
return new String[0];
    

String[] arr=new String[array.length()];
for(int i=0; i<arr.length; i++) {
arr[i]=array.optString(i);
}
return arr;
}

使用 List<String>不是一个好主意,因为您知道数组的长度。 请注意,它在 for条件下使用 arr.length以避免在每个循环上调用方法,即 array.length()

只使用可移植的 JAVA API


    try (JsonReader reader = Json.createReader(new StringReader(yourJSONresponse))) {
JsonArray arr = reader.readArray();


List<String> l = arr.getValuesAs(JsonObject.class)
.stream().map(o -> o.getString("name")).collect(Collectors.toList());
}

您可以将 json 数组输入到这个函数中,以字符串数组的形式获得输出

例子 Input-{ “性别”: [“男性”,“女性”] }

输出-{“男性”,“女性”}

private String[] convertToStringArray(Object array) throws Exception {
return StringUtils.stripAll(array.toString().substring(1, array.toString().length()-1).split(","));
}

一个现成的方法:

/**
* Convert JSONArray to ArrayList<String>.
*
* @param jsonArray JSON array.
* @return String array.
*/
public static ArrayList<String> toStringArrayList(JSONArray jsonArray) {


ArrayList<String> stringArray = new ArrayList<String>();
int arrayIndex;
JSONObject jsonArrayItem;
String jsonArrayItemKey;


for (
arrayIndex = 0;
arrayIndex < jsonArray.length();
arrayIndex++) {


try {
jsonArrayItem =
jsonArray.getJSONObject(
arrayIndex);


jsonArrayItemKey =
jsonArrayItem.getString(
"name");


stringArray.add(
jsonArrayItemKey);
} catch (JSONException e) {
e.printStackTrace();
}
}


return stringArray;
}

下面的代码将转换格式的 JSON 数组

[{“ version”: “70.3.0.3”} ,{“ version”: “6R _ 16B000I _ J4; 3”} ,{“ version”: “46.3.0.3”} ,{“ version”: “20.3.0; 2”} ,{“ version”: “4.1.3; 0”} ,{“ version”: “10.3.0; 1”}]

到字符串列表

[70.3.0.3,6R _ 16B000I _ J4; 3,46.3.0.3,20.3.0; 2,4.1.3; 0,10.3.0; 1]

密码 :

ObjectMapper 映射器 = 新的 ObjectMapper () ; ArrayNode node = (ArrayNode) mapper.readTree (dataFromDb) ; Data = node.findValuesAsText (“ version”) ; //“ version”是 JSON

中的节点

并使用 com.fasterxml.jackson.datind. ObjectMapper

现在回答有点晚了,不过我用 Gson 想到了这个:

对于 jsonarray foo: [{“ test”: “ bar”} ,{“ test”: “ bar2”}]

JsonArray foo = getJsonFromWherever();
String[] test = new String[foo.size()]
foo.forEach(x -> {test = ArrayUtils.add(test, x.get("test").getAsString());});

正在尝试相同的场景之一,但找到了一个不同的简单的解决方案来将 JSONArray 转换为 List。

import java.lang.reflect.Type;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;


String jsonStringArray = "[\"JSON\",\"To\",\"Java\"]";
    

//creating Gson instance to convert JSON array to Java array
                   

Gson converter = new Gson();
Type type = new TypeToken<List<String>>(){}.getType();
List<String> list =  converter.fromJson(jsonStringArray, type );

试试看

您可能想看看 JSONArray.toList(),它返回一个包含 Maps 和 Lists 的 List,它表示您的 JSON 结构。所以你可以像下面这样使用它:

JSONArray array = new JSONArray(jsonString);
List<String> result = array.toList().stream()
.filter(Map.class::isInstance)
.map(Map.class::cast)
.map(o -> o.get("name"))
.filter(String.class::isInstance)
.map(String.class::cast)
.collect(Collectors.toList());

即使对于更复杂的对象,这也可能是有用的。

或者,您可以使用 IntStream迭代 JSONArray中的所有项并映射所有名称:

JSONArray array = new JSONArray(jsonString);
List<String> result = IntStream.range(0, array.length())
.mapToObj(array::getJSONObject)
.map(o -> o.getString("name"))
.collect(Collectors.toList());

我确实在这里张贴了一个问题 给你的答案,这是关闭的,即使这里的答案有所帮助,但是不够。

因此,这是为了使用 Jsonsimple将 json 数组转换为 String[]

根据(了不起的) 解码示例和文档,JSONArray 是 java List,所以我们可以访问 List 方法。

从那里,是否有可能将其转换为具有以下特性的 String[]:

    JSONObject assemblingTags = (JSONObject) obj.get("assembling-tags");
JSONArray aTagsList = (JSONArray) assemblingTags.get("list");
String[] tagsList = (String[]) aTagsList.stream().toArray(String[]::new);

这是我的解决方案,你可能需要转换和合并不止一个数组:

public static String[] multiJsonArrayToSingleStringArray(JSONArray... arrays) {
ArrayList<String> list=new ArrayList<>();
for (JSONArray array : arrays)
for (int i = 0; i < array.length(); i++)
list.add(array.optString(i));


return list.toArray(new String[list.size()]);
}

下面的代码将把 JSON 数组转换为 List

例如:

import org.json.JSONArray


String data = "YOUR_JSON_ARRAY_DATA";
JSONArray arr = new JSONArray(data);
List<String> list = arr.toList().stream().map(Object::toString).collect(Collectors.toList());

我知道可能有点晚了,希望能帮到别人。

当你有一个字符串数组,是字符串。说这样的东西

String chars =  "["a","b","c"]";// Json stringfied string
List<String>charArray = (List<String>) JSON.parse(chars);


String[] stringArray = cars.toArray(new String[char.size()]);

数组就是这样

 stringarray = ["a","b","c"];