71

我想问一个关于将 a 转换jsonArrayStringArrayon的问题AndroidjsonArray这是我从服务器获取的代码。

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

感谢您的帮助 :)

4

17 回答 17

73

看看这个教程。你也可以像这样解析上面的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"));
}
于 2013-04-08T04:37:38.147 回答
30

最简单和正确的代码是:

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

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

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

于 2015-10-29T18:08:31.737 回答
13
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;
}
于 2014-06-05T09:01:16.890 回答
12

无耻的黑客:

String[] arr = jsonArray.toString().replace("},{", " ,").split(" ");
于 2013-04-08T04:36:25.560 回答
8

您可以循环创建字符串

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()]);
于 2013-04-08T04:39:21.877 回答
4

正在尝试相同的场景之一,但发现了一种将 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 );

试一下

于 2019-07-18T10:23:44.233 回答
3

这是代码:

// 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);
        }
于 2013-04-08T04:52:50.553 回答
1

你去:

String tempNames = jsonObj.names().toString();  
String[] types = tempNames.substring(1, tempNames.length()-1).split(","); //remove [ and ] , then split by ','
于 2015-01-18T14:41:41.397 回答
1

仅使用可移植的 JAVA API。http://www.oracle.com/technetwork/articles/java/json-1973242.html


    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());
    }
于 2017-01-10T09:25:51.003 回答
1

即用型方法:

/**
* 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;
}
于 2017-05-23T04:57:34.203 回答
1

您可能想看一下JSONArray.toList(),它返回一个List包含 Maps 和 Lists 的内容,它们代表您的 JSON 结构。因此,您可以将它与 Java Streams 一起使用,如下所示:

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());

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

或者,您可以只使用 anIntStream来遍历 the 中的所有项目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());
于 2019-07-23T21:36:10.117 回答
1

这是我的解决方案,您可能想要转换和合并多个数组:

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()]);
}
于 2021-08-27T14:25:31.203 回答
0

您可以将 json 数组输入到此函数以字符串数组的形式输出

示例输入 - { "gender" : ["male", "female"] }

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

private String[] convertToStringArray(Object array) throws Exception {
   return StringUtils.stripAll(array.toString().substring(1, array.toString().length()-1).split(","));
}
于 2017-01-29T07:23:52.040 回答
0

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

[{"version":"70.3.0;3"},{"version":"6R_16B000I_J4;3"},{"version":"46.3.0;3"},{"version":"20.3.0 ;2"},{"版本":"4.1.3;0"},{"版本":"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 mapper = new ObjectMapper(); ArrayNode node = (ArrayNode)mapper.readTree(dataFromDb); data = node.findValuesAsText("version");// “版本”是 JSON 中的节点

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

于 2018-07-06T06:41:20.057 回答
0

答案有点晚了,但这是我使用 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());});
于 2019-01-18T18:03:44.517 回答
0

我确实在此处发布了针对此处已关闭的问题的答案,即使此处的回答有所帮助,但还不够。

因此,这是为了String[]使用jsonsimple获取 json 数组。

根据(奇妙的)解码示例和文档,JSONArrays 是 java List,因此我们可以访问 List 方法。

从那里,是否可以将其转换为 aString[]具有以下内容:

    JSONObject assemblingTags = (JSONObject) obj.get("assembling-tags");
    JSONArray aTagsList = (JSONArray) assemblingTags.get("list");
    String[] tagsList = (String[]) aTagsList.stream().toArray(String[]::new);
于 2020-01-06T13:11:54.630 回答
0

下面的代码将 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());
于 2021-09-25T23:25:06.863 回答