it-swarm.com.de

Konvertieren Sie JSONArray in String Array

Ich möchte eine Frage zum Konvertieren eines jsonArray in einen StringArray auf Android stellen. Hier ist mein Code, um jsonArray vom Server zu erhalten.

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

Und das ist die 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"}
]

Wie kann ich jsonArray in StringArray konvertieren, damit ich StringArray folgendermaßen erhalten kann:

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

Danke für deine Hilfe :)

41
andikurnia

werfen Sie einen Blick auf dieses Tutorial Sie können auch über json parsen 

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"));
}
53
Saad Asad

Einfachster und korrekter Code ist:

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

Die Verwendung von List<String> Ist keine gute Idee, da Sie die Länge des Arrays kennen. Beachten Sie, dass es arr.length In for verwendet, um zu vermeiden, dass eine Methode, d. H. array.length(), in jeder Schleife aufgerufen wird.

20
begrossi
String[] arr = jsonArray.toString().replace("},{", " ,").split(" ");
13
drewmoore
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;
}
10
toddsalpen

Sie können eine Schleife erstellen, um den String zu erstellen 

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

Da gehst du hin:

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

Hier ist der Code: 

// 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);
        }
3
Visruth

Sie können ein json-Array in diese Funktion eingeben und die Ausgabe als String-Array erhalten

beispiel Eingabe - { "Geschlecht Männlich Weiblich"] } 

ausgabe - {"männlich", "weiblich"}

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

Eine gebrauchsfertige Methode:

/**
* 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;
}
1
Zon

Verwenden Sie nur die portable 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());
    }
1
Leo

Ich habe das gleiche Szenario ausprobiert, aber eine andere und einfache Lösung gefunden, um JSONArray in List zu konvertieren.

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

Versuche es.

0
YouBee

Der folgende Code konvertiert das JSON-Array des Formats 

[{"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 "}]

zur Liste der Zeichenfolge

[70.3.0; 3, 6R_16B000I_J4; 3, 46.3.0; 3, 20.3.0; 2, 4.1.3; 0, 10.3.0; 1]

Code :

ObjectMapper mapper = new ObjectMapper(); ArrayNode node = (ArrayNode)mapper.readTree(dataFromDb); data = node.findValuesAsText("version"); // "version" ist der Knoten in der JSON

und verwenden Sie com.fasterxml.jackson.databind.ObjectMapper

0
Cjo

Vielleicht möchten Sie einen Blick auf JSONArray.toList() werfen, das ein List zurückgibt, das Maps und Listen enthält, die Ihre JSON-Struktur darstellen. So können Sie es mit Java Streams wie folgt verwenden:

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

Dies kann auch bei komplexeren Objekten hilfreich sein.

Alternativ können Sie auch einfach ein IntStream verwenden, um alle Elemente im JSONArray zu durchlaufen und alle Namen zuzuordnen:

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

Etwas zu spät für eine Antwort, aber hier habe ich Gson gefunden:

für ein 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());});
0
Segualex