使用com.google.code.gson在Java8中创建JSON对象



我正在尝试使用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"
  }
}

所以我有两个问题。

  1. 我在创建Json对象时出错。Wrong 2nd argument type. Found: 'java.lang.String', required: 'com.google.gson.JsonElement'我知道我必须改变第二个参数,但我在文档中找不到如何操作那个

  2. 我怎么能把这个漂亮地打印出来。

感谢

您使用了错误的方法: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));

最新更新