需要使用GSON返回Java的JSONArray。

4
我无法返回一个JSONArray,相反,我的对象似乎是一个字符串。myArray的值与jsonString的值相同。该对象是一个字符串对象而不是JSONArray,并且jsonString和myArray都打印如下:
[{"id":"100002930603211",
  "name":"Aardvark Jingleheimer",
  "picture":"shortenedExample.jpg" },
 {"id":"537815695",
   "name":"Aarn Mc",
   "picture":"shortendExample.jpg" },
 {"id":"658471072",
   "name":"Adrna opescu",
   "picture":"shortenedExample.jpg"
}]

我该怎样将这个转换成一个真正的Java JSONArray?谢谢!
           //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();

这不可能是正确的。getAsJsonArray() 返回一个 JSONArray。Java 是静态类型的,如果 myArray 不是真正的 JsonArray,那么你上面写的代码将无法编译通过。 - Max
Gson的JsonArray对象与Java的JSONArray对象不同。我想创建一个JSONArray。 - Tom
1
没有所谓的Java JSONArray对象。你是指来自http://json.org的JSONArray吗? - Max
1
如果你正在使用Gson,为什么还要费心去学json.org相关的东西呢? - Max
嗨Max,这是我的第一个Java项目,请原谅我对JSONArray不是Java对象的无知。我确实想出了如何完成我的任务,即通过“名称”元素按字母顺序排列JSONArray。我在下面发布了代码。路径是JSONArray - ArrayList - sort list - 通过GSON返回到JSONArray。不过,如果有更好的方法,我很乐意听取建议。谢谢! - Tom
尝试一下我在下面回答中提出的建议吧!祝一切顺利。 - Max
2个回答

1

我认为你可以不用编写JSON字符串并重新读取它就能实现你想要的功能:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接