2012-04-04 15 views
4

Ich kann kein JSONArray zurückgeben, stattdessen scheint mein Objekt ein String zu sein. Der Wert myArray ist der gleiche Wert wie jsonString. Das Objekt ist ein String-Objekt und kein JSONArray. und beide jsonString und myArray prnt:muss GSON ein Java JSONArray zurückgeben

[{"id":"100002930603211", 
    "name":"Aardvark Jingleheimer", 
    "picture":"shortenedExample.jpg" }, 
{"id":"537815695", 
    "name":"Aarn Mc", 
    "picture":"shortendExample.jpg" }, 
{"id":"658471072", 
    "name":"Adrna opescu", 
    "picture":"shortenedExample.jpg" 
}] 

Wie kann ich konvertieren, dies zu einem tatsächlichen Java JSONArray? Vielen Dank!

  //arrPersons is an ArrayList 

     Gson gson = new Gson(); 
     String jsonString = gson.toJson(arrPersons); 

     JsonParser parser = new JsonParser(); 
     JsonElement myElement = parser.parse(jsonString); 
     JsonArray myArray = myElement.getAsJsonArray(); 
+0

Das kann nicht richtig sein. getAsJsonArray() gibt ein JSONArray zurück. Java wird statisch getippt, was Sie oben geschrieben haben, würde nicht kompilieren, wenn myArray nicht wirklich ein JsonArray wäre. – Max

+0

das ist ein Teil meiner Frage. Das Gson JsonArray-Objekt unterscheidet sich von dem Java JSONArray-Objekt. Ich möchte ein JSONArray erstellen. – Tom

+1

? Es gibt kein Java-JSONArray-Objekt. Meinst du JSONArray von http://json.org? – Max

Antwort

1

ich glaube, Sie können tun, was Sie wollen, ohne einen JSON-String schreiben und dann wieder lesen:

List<Person> arrPersons = new ArrayList<Person>(); 

// populate your list 

Gson gson = new Gson(); 
JsonElement element = gson.toJsonTree(arrPersons, new TypeToken<List<Person>>() {}.getType()); 

if (! element.isJsonArray()) { 
// fail appropriately 
    throw new SomeException(); 
} 

JsonArray jsonArray = element.getAsJsonArray(); 
0
public JSONArray getMessage(String response){ 

    ArrayList<Person> arrPersons = new ArrayList<Person>(); 
    try { 
     // obtain the response 
     JSONObject jsonResponse = new JSONObject(response); 
     // get the array 
     JSONArray persons=jsonResponse.optJSONArray("data"); 


     // iterate over the array and retrieve single person instances 
     for(int i=0;i<persons.length();i++){ 
      // get person object 
      JSONObject person=persons.getJSONObject(i); 
      // get picture url 
      String picture=person.optString("picture"); 
      // get id 
      String id=person.optString("id"); 
      // get name 
      String name=person.optString("name"); 

      // construct the object and add it to the arraylist 
      Person p=new Person(); 
      p.picture=picture; 
      p.id=id; 
      p.name=name; 
      arrPersons.add(p); 
     } 
     //sort Arraylist 
     Collections.sort(arrPersons, new PersonSortByName()); 


    Gson gson = new Gson(); 
    //gson.toJson(arrPersons); 

    String jsonString = gson.toJson(arrPersons); 

    sortedjsonArray = new JSONArray(jsonString); 



    } catch (JSONException e) { 

     e.printStackTrace(); 
    } 

    return sortedjsonArray; 

} 



public class PersonSortByName implements Comparator<Person>{ 

    public int compare(Person o1, Person o2) { 
    return o1.name.compareTo(o2.name); 
    } 
    } 

    public class Person{ 
     public String picture; 
     public String id; 
     public String name; 
    } 
Verwandte Themen