当我使用JSON-Lib项目时,我可以使用命令
创建JSONObject jObject = new JSONObject();
jObject.accumulate("articles", list);
String json = jObject.toString();
以下输出:
{
"articles": [
{
"amount": "50",
"id": "1",
"pct": "50,00",
"price": "162,37",
"startamount": "100",
"stockvalue": "8118,45"
},
{
"amount": "20",
"id": "2",
"pct": "20,00",
"price": "164,83",
"startamount": "100",
"stockvalue": "3296,60"
},
{
"amount": "20",
"id": "3",
"pct": "20,00",
"price": "170,40",
"startamount": "100",
"stockvalue": "3408,00"
},...
]
}
与此同时,我使用Gson项目并与之相关联。 但是以下代码:
Gson gson = new Gson();
String json = gson.toJson(list);
会给我这个输出:
[
{
"id": "1",
"amount": "50",
"startamount": "100",
"pct": "50,00",
"price": "162,37",
"stockvalue": "8118,45"
},
{
"id": "2",
"amount": "20",
"startamount": "100",
"pct": "20,00",
"price": "164,83",
"stockvalue": "3296,60"
},...]
我列表中的元素是我的pojo文章中的对象
public class Article implements IsSerializable {
private String id;
private String amount;
private String startamount;
private String pct;
private String price;
private String stockvalue;
public Article(){
}
//Setter & Getter
}
如何在Gson的帮助下创建一个JSON字符串,就像JSON-Lib将创建的一样(JSONObject with JSONArray,它包含JSONObjects)。 将来,JSON String将/必须使用更多数组进行扩展(不是文章,而是其他内容)。
我从HttpServlet中检索这个生成的JSON字符串。将Gson JSON字符串反序列化回ArrayList是否有意义,还是应该使用GWT JavaScript Overlay Types?
谢谢& BR, mybecks
答案 0 :(得分:2)
这是因为你给了Gson一个对象列表。因此,如果您希望获得与第一个json片段相同的输出,则必须定义对象,该对象将包含文章列表。例如。 :
public class ArticlesResult {
private List<Article> articles;
...//the rest of the code, like getters and setters
}
关于将JsArray转换回ArrayList。这取决于大多数情况下使用覆盖类型更好,因为它们创建起来更快,并且在生成的JS代码中占用空间小。但它仅适用于生产模式。在devmode中,叠加类型较慢,因此如果您快速访问叠加类型,则会浪费大量时间。
答案 1 :(得分:1)
Gson是一个Java库,可用于将Java对象转换为JSON表示。
这意味着您必须在序列化为JSON的Java对象的JSON字符串中提供要查看的完整结构。
在您的情况下,您需要将文章列表包装在具有属性“articles”的bean中。
如果需要构建动态结构,Gson可能不是最适合您的工具。 您可以将Gson与JAXB等XML绑定工具进行比较。与JAXB一起使用的bean结构不应在运行时更改。