2015-12-02 42 views
0

的完整JSON字符串我有具有以下领域如何生成Java实例

class MyEvent { 
    private long eventId; 
    private EventType eventType; 
    private EventCategory category; 
    private List<String> params; 
    private Boolean exists; 
    private long time; 
    private MyLocation location; 
    private boolean eventFlag; 
    private EventCriticality criticality; 
    private EventStatus eventStatus; 
} 

正如你可以看到这个类有原始的油田,它们与原始类型的包装类(如布尔存在),枚举(EventStatus,EventCategory等)和其他参考字段(如MyLocation位置),集合

我想生成完整的json字符串,它具有所有字段。

当我使用

Gson gson = new GsonBuilder().setPrettyPrinting().create(); 
String json = gson.toJson(myevent); 

我只得到了原始的领域所产生的JSON是

{ 
    "eventid": 0, 
    "time": 0, 
    "eventFlag": false 
} 

这里myevent是MyEvent的情况下,我获得通过使用反射,即我有课,然后调用clazz.newInstance()

我怎样才能生成一个json字符串,所有的领域,即完整的json字符串。

+0

它可能发生,你的其他领域是'空',所以Gson忽略它。你能检查它吗?你可以明确地按照以下方式设置序列化空值: 'Gson gson = new GsonBuilder()。setPrettyPrinting()。serializeNulls()。create();' – OleGG

+0

这里是一个例子http://thegeekyland.blogspot.com/2015 /11/serializing-and-deserializing-json-from.html – Arlind

回答

1

如果您可以灵活地更改api,则可以使用Jackson API http://wiki.fasterxml.com/JacksonHome

与杰克逊,你可以这样写

MyEvent myEvent = new MyEvent(); 
//Your code to set myEvent 
ObjectMapper mapper = new ObjectMapper(); 
String str1 = mapper.writeValueAsString(myEvent); 

代码,您将获得所需的输出。它将通过myEvent循环遍历所有对象并生成一个json。

+0

这样做的事情,但价值为空。我想这是因为我们需要创建一个包含所有值的实例。 –

+0

是的,如果你的所有实例都被初始化了,它应该按照你的想法工作。 –