将JSONArray转换为String Array

and*_*nia 52 java android json

我想问一个关于将a转换jsonArrayStringArrayon的问题Android.这是我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();
}
Run Code Online (Sandbox Code Playgroud)

这就是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"}
]
Run Code Online (Sandbox Code Playgroud)

如何将我已经获得的jsonArray转换为StringArray,以便我可以像这样得到StringArray:

array = {"IMG_20130403_140457.jpg","IMG_20130403_145006.jpg",........,"test.jpg"};
Run Code Online (Sandbox Code Playgroud)

谢谢您的帮助 :)

Saa*_*sad 65

看看这个教程 也可以解析上面的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"));
}
Run Code Online (Sandbox Code Playgroud)

  • 由于数组的长度是已知的,因此应使用显式的大小构造ArrayList(例如,new ArrayList &lt;String&gt;(arr.length()))。 (2认同)

小智 20

最简单和正确的代码是:

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;
}
Run Code Online (Sandbox Code Playgroud)

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


dre*_*ore 15

String[] arr = jsonArray.toString().replace("},{", " ,").split(" ");
Run Code Online (Sandbox Code Playgroud)

  • 这是不安全的:[{"name":"},{"},...] (9认同)
  • 问题是,如果某些字符串包含json(如"},{"),它也会被拆分. (4认同)

tod*_*pen 9

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;
}
Run Code Online (Sandbox Code Playgroud)

  • 代码只有答案,虽然它们可能是正确的,但很少提供信息,因为它们也解释了原因.考虑在帖子中添加一些评论或解释. (3认同)
  • 使用后检查“ jsonArray”是否为空-是错误的,因为在检查本身之前您可能会得到NPE。 (2认同)

Bhu*_*ale 8

您可以循环创建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()]);
Run Code Online (Sandbox Code Playgroud)


You*_*Bee 7

正在尝试相同的场景之一,但发现了一种不同且简单的解决方案将 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 );
Run Code Online (Sandbox Code Playgroud)

试一下