71

jsonArrayaからStringArrayonへの変換について質問したいです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"}
]

次のように StringArray を取得できるように、取得した jsonArray を 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.lengthで in condition を使用していることに注意してください。forarray.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 に答える
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

どうぞ:

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 に答える
0

この関数にjson配列を入力すると、文字列配列として出力されます

入力例 - { "性別" : ["男性", "女性"] }

出力 - {「男性」、「女性」}

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

ここでの回答は役に立ちましたが、十分ではありませんでしたが、閉じられた質問の回答をここに投稿します

したがって、これはjsonsimpleString[]を使用して json 配列を取得するためです。

(素晴らしい)デコードの例と docsによると、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);
于 2020-01-06T13:11:54.630 に答える