簡體   English   中英

Java JSON /對象到數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM