我遇到了一個 API,它為“fieldValue”返回不同類型的值,如下所示:{ "id" : 123, "fieldType" : "text", "fieldValue" : "some test"}{ "id" : 456, "fieldType" : "checkbox", "fieldValue" : [ { "checkboxId" : 1, "name" : "Homer" }, { "checkboxId" : 2, "name" : "Marge" } ]}{ "id" : 789, "fieldType" : "Select", "fieldValue" : { "selectId" : 3, "value" : "Lisa" }}我正在使用 GSON,它不喜歡“fieldValue”可以是字符串、對象或數(shù)組這一事實。我已經(jīng)編寫了自定義解串器來解析它。我的問題是 JSON 規(guī)范是否允許 JSON 對象具有松散定義的值類型,這意味著 fieldValue 類型可以是字符串、對象數(shù)組或?qū)ο螅?
2 回答
慕萊塢森
TA貢獻(xiàn)1810條經(jīng)驗 獲得超4個贊
的JSON規(guī)范只提到了JSON對象的語法,而不是語義。所以解析器不會檢查給定的值應(yīng)該是 A 類型還是 B 類型。它會讀取任何可用的值,如果語法被破壞,它將報告錯誤。由您的應(yīng)用程序來驗證內(nèi)容并做出相應(yīng)的反應(yīng)。
回首憶惘然
TA貢獻(xiàn)1847條經(jīng)驗 獲得超11個贊
不,它甚至有時可能是一個好政策。JSON 規(guī)范本身并沒有說明 JSON 中呈現(xiàn)的對象是什么。這是 API 規(guī)范的責(zé)任。
您擁有的 API 似乎依賴于fieldType我猜您用來進(jìn)行自定義反序列化的鑒別器字段。
這也是使用的策略,RuntimeTypeAdapterFactory在您的情況下也可能是很好的解決方案。
添加回答
舉報
0/150
提交
取消
