您的數據存在問題,因爲您的數組中包含內部包裝對象。假設您的Vendor
對象設計爲處理id
,name
,company_id
,但這些多個對象中的每一個也都包含在具有單個屬性vendor
的對象中。
我假設你正在使用Jackson Data Binding模型。
如果是的話,需要考慮兩件事情:
首先是採用了特殊的傑克遜config屬性。傑克遜 - 自1.9以來,我相信,如果您使用舊版本的傑克遜,這可能不可用 - 提供UNWRAP_ROOT_VALUE
。它適用於將結果包裝在要放棄的頂級單一屬性對象中的情況。
所以,玩弄:
objectMapper.configure(SerializationConfig.Feature.UNWRAP_ROOT_VALUE, true);
第二是使用包裝對象。即使在丟棄外部包裝對象後,仍然存在將對象包裝在單個屬性對象中的問題。使用的包裝來解決這個問題:
class VendorWrapper
{
Vendor vendor;
// gettors, settors for vendor if you need them
}
類似的,而不是使用UNWRAP_ROOT_VALUES
,你也可以定義一個包裝類來處理外部對象。假設你有正確的Vendor
,VendorWrapper
對象,你可以定義:
class VendorsWrapper
{
List<VendorWrapper> vendors = new ArrayList<VendorWrapper>();
// gettors, settors for vendors if you need them
}
// in your deserialization code:
ObjectMapper mapper = new ObjectMapper();
JsonNode rootNode = mapper.readValue(jsonInput, VendorsWrapper.class);
爲VendorsWrapper對象樹類似於你的JSON:
VendorsWrapper:
vendors:
[
VendorWrapper
vendor: Vendor,
VendorWrapper:
vendor: Vendor,
...
]
最後,您可以使用傑克遜Tree Model解析這個成JsonNodes
,丟棄所述外節點,以及用於在每個ArrayNode
JsonNode
,調用:
mapper.readValue(node.get("vendor").getTextValue(), Vendor.class);
這可能會導致較少的代碼,但似乎不會比使用兩個包裝器笨拙。
這是無效的JSON。 'vendor'有一個數組,它有一個單一的對象,單個對象有一個'vendor'屬性,然後是一個光禿的頂級對象。即第二個'vendor'對象在數組中的單個對象中沒有關聯的屬性。此外,屬性名稱不是字符串,它們需要用JSON引用。我猜你已經輸入了錯誤的JSON?一個好的答案將取決於你知道你實際使用的是什麼樣的JSOn。 – pb2q 2012-07-31 19:24:52
對不起,讓我糾正JSON - 現在應該修復 – 2012-07-31 19:50:00
您無法(或不想)擁有包含列表的供應商類? –
hertzsprung
2012-07-31 20:05:34