2

I am trying to return JSON data with my restlet. I can return a single item's JSON with..

import org.json.JSONObject;

Site aSite = new Site().getSite();   
JSONObject aSiteJson = new JSONObject(aSite);
return aSiteJson.toString();

Returns: {"name":"qwerty","url":"www.qwerty.com"}

How do i return JSON for ArrayList Object

ArrayList<Site> allSites = new SitesCollection().getAllSites();   
JSONObject allSitesJson = new JSONObject(allSites);
return allSitesJson.toString();

Returns: {"empty":false}

ArrayList<Site> allSites = new SitesCollection().getAllSites();   
JSONArray allSitesJson = new JSONArray(allSites);
return allSitesJson.toString();

Returns: ["com.sample.Site@4a7140","com.sample.Site@1512c2e","com.sample.Site@2bba21","com.sample.Site@c8d0b7"]

Here is my Site class

public class Site {
private String name;
private String url;

public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}
public String getUrl() {
    return url;
}
public void setUrl(String url) {
    this.url = url;
}

public Site(String name, String url) {
    super();
    this.name = name;
    this.url = url;
}       

}

Thanks


you have to add each item of the array as JSONObject as an index of the arraylist

loop through your arraylist, creating jsonobjects where each element of your Site object is a key,value pair in your jsonobject

and then add that jsonobject in your jsonarray's index

for(int i = 0; i < allsites.length(); i++){
    ...
}
4

4 回答 4

8

You coud use Gson library, that handles lists properly, instead.


Usage example:

class BagOfPrimitives {
    private int value1;
    private String value2;
    private transient int value3;
    public BagOfPrimitives(int value1, String value2, int value3) {
        this.value1 = value1;
        this.value2 = value2;
        this.value3 = value3;
    }
}

BagOfPrimitives obj1 = new BagOfPrimitives(1, "abc", 3);
BagOfPrimitives obj2 = new BagOfPrimitives(32, "gawk", 500);
List<BagOfPrimitives> list = Arrays.asList(obj1, obj2);
Gson gson = new Gson();
String json = gson.toJson(list);  
// Now json is [{"value1":1,"value2":"abc"},{"value1":32,"value2":"gawk"}]
于 2012-10-11T21:16:21.923 回答
1

You could override the toString method in your Site class to return new JSONObject(this).toString

于 2012-10-11T22:11:20.573 回答
0

here is my solution using simple-json.

JSONArray jr = new JSONArray();
for (int x = 1; x <= number_of_items; x++)
    {
        JSONObject obj = new JSONObject();
        obj.put("key 1", 10);
        obj.put("key 2", 20);
        jr.add(obj);

    }
System.out.print(jr);

Output:

[{"key 1":10,"key 2":20},{"key 1":10,"key 2":20}]
于 2017-04-10T11:24:10.443 回答
0

您必须将数组的每个项目添加为 JSONObject 作为数组列表的索引

循环遍历您的数组列表,创建 jsonobjects,其中 Site 对象的每个元素都是 jsonobject 中的键值对

然后将该 jsonobject 添加到您的 jsonarray 的索引中

for(int i = 0; i < allsites.length(); i++){
    ...
}
于 2012-10-11T21:14:15.117 回答