我正在尝试使用JAVA 8中的com.google.code.jso
创建一个JSON对象。我有一个对象列表,我正在对它们进行迭代。对象为:
public class MyObject {
private String name, status, cause, id;
public String getName() {
return name;
}
public String getStatus() {
return status;
}
public String getCause() {
return cause;
}
public String getId() {
return id;
}
}
我有一个以上对象的列表,我正在尝试使用下面的(相关代码(将它们转换为JSON:
import com.google.gson.JsonObject;
JsonObject status = new JsonObject();
for (MyObject obj : objectLists){
status.add(obj.getId(),
new JsonObject()
.add("Name: ", obj.getName())
.add("Status: ", obj.getStatus())
.add("Cause: ", obj.getCause())
);
}
我希望得到以下形式的JSON:
{
"0 (this is the id i get from myObject.getId())": {
"name": The name i get from myObject.getName(),
"Status": The status from myobject.getStatus(),
"cause": The status from myobject.getCause()
},
"1": {
"name": "myname",
"Status": "mystatus",
"cause": "cause"
}
}
所以我有两个问题。
我在创建Json对象时出错。
Wrong 2nd argument type. Found: 'java.lang.String', required: 'com.google.gson.JsonElement'
我知道我必须改变第二个参数,但我在文档中找不到如何操作那个我怎么能把这个漂亮地打印出来。
感谢
您使用了错误的方法:JsonObject.addProperty()
,而不是JsonObject.add()
JsonObject.add(String, JsonElement)
-将嵌套的json元素添加到对象中:
{
"root": {
"nested": {}
}
}
JsonObject.addProperty(String, String)
-向对象添加属性(可以是任何基元或字符串(:
{
"root": {
"property": "some string"
}
}
为什么不使用它呢。
Gson.toJson(obj);
您应该将字符串包装在JsonPrimitive
对象中,例如:
new JsonObject().add("Name: ", new JsonPrimitive(obj.getName()));
要实现漂亮的打印,您必须使用GsonBuilder.setPrettyPrinting()
:
Gson gson = new GsonBuilder().setPrettyPrinting().create();
System.out.println(gson.toJson(obj));