it-swarm.com.de

Konvertieren Sie das Json Array in ein normales Java Array

Gibt es eine Möglichkeit, ein JSON-Array in ein normales Java-Array für die ListView-Datenbindung von Android zu konvertieren?

ArrayList<String> list = new ArrayList<String>();     
JSONArray jsonArray = (JSONArray)jsonObject; 
if (jsonArray != null) { 
   int len = jsonArray.length();
   for (int i=0;i<len;i++){ 
    list.add(jsonArray.get(i).toString());
   } 
} 
175
Pentium10

Wenn Sie noch kein JSONArray-Objekt haben, rufen Sie auf

JSONArray jsonArray = new JSONArray(jsonArrayString);

Dann durchlaufen Sie das einfach und bauen ein eigenes Array auf. Bei diesem Code wird davon ausgegangen, dass es sich um ein Array von Strings handelt. Es sollte nicht schwierig sein, diese an Ihre Arraystruktur anzupassen.

List<String> list = new ArrayList<String>();
for (int i=0; i<jsonArray.length(); i++) {
    list.add( jsonArray.getString(i) );
}
54
Nick

Vielleicht ist es nur eine Umgehung (nicht sehr effizient), aber Sie könnten so etwas tun:

String[] resultingArray = yourJSONarray.join(",").split(",");

Natürlich können Sie das Trennzeichen "," beliebig ändern (ich hatte eine JSONArray E-Mail-Adresse).

10
Guido Sabatini

Anstelle der gebündelten org.json-Bibliothek verwenden Sie entweder Jackson oder GSON, wobei dies ein Einzeiler ist. Mit Jackson, zB:

List<String> list = new ObjectMapper().readValue(json, List.class);
// Or for array:
String[] array = mapper.readValue(json, String[].class);
10
StaxMan

Verwenden Sie einen String[] anstelle eines ArrayList<String>:

Dadurch wird der Speicheraufwand verringert, den eine ArrayList hat

Ich hoffe es hilft!

String[] stringsArray = new String[jsonArray.length()];
for (int i = 0; i < jsonArray.length; i++) {
    parametersArray[i] = parametersJSONArray.getString(i);
}
4
nurxyz

Sie können einen String[] anstelle eines ArrayList<String> verwenden:

Ich hoffe es hilft!

   private String[] getStringArray(JSONArray jsonArray) throws JSONException {
            if (jsonArray != null) {
                String[] stringsArray = new String[jsonArray.length()];
                for (int i = 0; i < jsonArray.length(); i++) {
                    stringsArray[i] = jsonArray.getString(i);
                }
                return stringsArray;
            } else
                return null;
        }
0
Iman Marashi

Hier ist eine bessere Möglichkeit, dies zu tun: Wenn Sie die Daten von der API erhalten Dann PARSE die JSON und lade sie in deine Listenansicht:

protected void onPostExecute(String result) {
                Log.v(TAG + " result);


                if (!result.equals("")) {

                    // Set up variables for API Call
                    ArrayList<String> list = new ArrayList<String>();

                    try {
                        JSONArray jsonArray = new JSONArray(result);

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

                            list.add(jsonArray.get(i).toString());

                        }//end for
                    } catch (JSONException e) {
                        Log.e(TAG, "onPostExecute > Try > JSONException => " + e);
                        e.printStackTrace();
                    }


                    adapter = new ArrayAdapter<String>(ListViewData.this, Android.R.layout.simple_list_item_1, Android.R.id.text1, list);
                    listView.setAdapter(adapter);
                    listView.setOnItemClickListener(new OnItemClickListener() {
                        @Override
                        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

                            // ListView Clicked item index
                            int itemPosition = position;

                            // ListView Clicked item value
                            String itemValue = (String) listView.getItemAtPosition(position);

                            // Show Alert
                            Toast.makeText( ListViewData.this, "Position :" + itemPosition + "  ListItem : " + itemValue, Toast.LENGTH_LONG).show();
                        }
                    });

                    adapter.notifyDataSetChanged();


                        adapter.notifyDataSetChanged();

...
0
Joolah

Ich weiß, dass es sich bei dieser Frage um JSONArray handelt, aber hier ein Beispiel, das ich für nützlich befunden habe, wenn Sie nicht JSONArray verwenden müssen, um Objekte aus JSONObject zu extrahieren.

import org.json.simple.JSONObject;
import org.json.simple.JSONValue;

String jsonStr = "{\"types\":[1, 2]}";
JSONObject json = (JSONObject) JSONValue.parse(jsonStr);
List<Long> list = (List<Long>) json.get("types");
if (list != null) {
    for (Long s : list) {
        System.out.println(s);
    }
}

Funktioniert auch mit Strings

0
pchot

   private String[] getStringArray(JSONArray jsonArray) throws JSONException {
            if (jsonArray != null) {
                String[] stringsArray = new String[jsonArray.length()];
                for (int i = 0; i < jsonArray.length(); i++) {
                    stringsArray[i] = jsonArray.getString(i);
                }
                return stringsArray;
            } else
                return null;
        }

0
user10878560

wir beginnen mit der Konvertierung [JSONArray -> List <JSONObject>]

public static List<JSONObject> getJSONObjectListFromJSONArray(JSONArray array) 
        throws JSONException {
  ArrayList<JSONObject> jsonObjects = new ArrayList<>();
  for (int i = 0; 
           i < (array != null ? array.length() : 0);           
           jsonObjects.add(array.getJSONObject(i++)) 
       );
  return jsonObjects;
}

erstellen Sie als Nächstes eine generische Version, die array.getJSONObject (i ++) durch POJO ersetzt

beispiel:

public <T> static List<T> getJSONObjectListFromJSONArray(Class<T> forClass, JSONArray array) 
        throws JSONException {
  ArrayList<Tt> tObjects = new ArrayList<>();
  for (int i = 0; 
           i < (array != null ? array.length() : 0);           
           tObjects.add( (T) createT(forClass, array.getJSONObject(i++))) 
       );
  return tObjects;
}

private static T createT(Class<T> forCLass, JSONObject jObject) {
   // instantiate via reflection / use constructor or whatsoever 
   T tObject = forClass.newInstance(); 
   // if not using constuctor args  fill up 
   // 
   // return new pojo filled object 
   return tObject;
}
0
ceph3us

Mit Java Streams können Sie einfach IntStream verwenden, um die Objekte zuzuordnen:

JSONArray array = new JSONArray(jsonString);
List<String> result = IntStream.range(0, array.length())
        .mapToObj(array::get)
        .map(Object::toString)
        .collect(Collectors.toList());
0
Samuel Philipp

Wir können den JSON einfach in einen lesbaren String konvertieren und ihn mit der "split" -Methode der String-Klasse teilen.

String jsonAsString = yourJsonArray.toString();
//we need to remove the leading and the ending quotes and square brackets
jsonAsString = jsonAsString.substring(2, jsonAsString.length() -2);
//split wherever the String contains ","
String[] jsonAsStringArray = jsonAsString.split("\",\"");
0
Mayank Yadav