[英]Java JSON/object to array
我對類型轉換有疑問。 我有以下JSON字符串:
{"server":"clients","method":"whoIs","arguments":["hello"]}
我將其解析為以下Map <String,Object>。
{arguments=[hello], method=whoIs, server=clients}
現在可以執行以下操作:
request.get("arguments");
這很好。 但是我需要獲取存儲在參數中的數組。 我該怎么做? 我嘗試(例如)以下操作:
System.out.println(request.get("arguments")[0]);
但是當然這是行不通的。
這怎么可能?
值很可能是java.util.List
。 因此,您可以像這樣訪問它:
System.out.println(((List<?>) request.get("arguments")).get(0));
但是為了獲得更方便的訪問權限,請看一下Jackson ,特別是其Tree Model :
JsonNode root = new ObjectMapper().readTree(source);
System.out.println(root.get("arguments").get(0));
當然,Jackson也可以綁定到常規Map,方法如下:
Map<?,?> map = new ObjectMapper().readValue(source, Map.class);
但是由於強制轉換以及無法優雅地處理null,訪問Maps不太方便。
也許
System.out.println( ((Object[]) request.get("arguments")) [0]);
? 您也可以嘗試將其強制轉換為String[]
。
無論如何,還有更多文明的JSON解析方式,例如http://code.google.com/p/google-gson/ 。
StaxMan是正確的,假設Java中的JSON數組的類型為List
(以ArrayList
作為實現),並假設JSON被反序列化,類似於
Map<String, Object> map = JSONParser.defaultJSONParser().parse(Map.class, jsonInput);
只需檢查類型即可輕松確定此類情況。
Map<String, Object> map = JSONParser.defaultJSONParser().parse(Map.class, jsonInput);
System.out.println(map);
for (String key : map.keySet())
{
Object value = map.get(key);
System.out.printf("%s=%s (type:%s)\n", key, value, value.getClass());
}
輸出:
{arguments=[hello], method=whoIs, server=clients}
arguments=[hello] (type:class java.util.ArrayList)
method=whoIs (type:class java.lang.String)
server=clients (type:class java.lang.String)
此外, 有關基本JSON解析的svenson文檔還描述了“ [b]默認情況下,數組將解析為java.util.List
實例”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.