2015-12-28 111 views
0

我使用GSON庫以這種方式來解析消息:解析多種類型的JSON與GSON

Message m = new Gson().fromJson(message, Message.class); 

現在我需要解析另一條帶一個完整的形式不同。消息是:

{foo: "aaa", bar: "bbb" } 

,而新的格式是:

{tag1: "ccc", tag2: "ddd"} 

我如何能夠區分兩種格式?

+0

創建另一個類,該類與其他消息的結構相匹配。 –

+0

當然可以,但我不知道我是在解析Message1還是Message2,所以如何決定是否需要Message1.class或Message2.class? – greywolf82

+0

啊。如果它們完全不同,那麼你應該知道你在解析什麼,或者在某個地方存在設計問題。如果它們是同一事物的變體,則將tag1和tag2屬性添加到Message.java中,並且在分析的Message對象中缺少的字段將爲空。 –

回答

0

創建一個帶有4個字段的Message類:foo,bar,tag1tag2

如果foobar爲空,那麼您得到了第二種消息。如果tag1tag2爲空,那麼你得到了第一種消息。

0

你在問什麼是GSon/Jackson不是這樣設計的。您正在使用ObjectMapping API,它允許您將json轉換爲預定義的類。

在您的例子的情況下:

Message m = new Gson().fromJson(message, Message.class); 

Message應該始終有映射操作String fooString bar

如果您知道只有兩個字符串值,但始終使用不同的字段,請將注意力放在Jackson Streaming API上,並創建始終具有2個字符串值的通用靈活jsonParser。在解析時,您將手動將其設置爲適當的字段。