Java JSON / объект в массив - PullRequest
1 голос
/ 12 апреля 2010

У меня вопрос о приведении типа. У меня есть следующая строка JSON:

{"server":"clients","method":"whoIs","arguments":["hello"]}

Я анализирую его на следующую карту .

{arguments=[hello], method=whoIs, server=clients}

Теперь возможно сделать следующее:

request.get("arguments");

Это отлично работает. Но мне нужно получить массив, который хранится в аргументах. Как я могу сделать это? Я попробовал (например) следующее:

System.out.println(request.get("arguments")[0]);

Но, конечно, это не сработало ..

Как это возможно?

Ответы [ 3 ]

3 голосов
/ 12 апреля 2010

Скорее всего, значение равно java.util.List. Таким образом, вы получите к нему доступ как:

System.out.println(((List<?>) request.get("arguments")).get(0));

Но для более удобного доступа, возможно, взгляните на Джексона , и, в частности, на Модель дерева :

JsonNode root = new ObjectMapper().readTree(source);
System.out.println(root.get("arguments").get(0));

Джексон, конечно, тоже может привязываться к обычной карте, что будет сделано так:

Map<?,?> map = new ObjectMapper().readValue(source, Map.class);

Но доступ к Картах немного менее удобен из-за приведений и неспособности корректно обрабатывать нули.

0 голосов
/ 16 июня 2011

StaxMan верен, что тип массива JSON в Java равен ListArrayList в качестве реализации), при условии, что 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)

Кроме того, документация svenson по базовому анализу JSON описывает, что "[b] yпо умолчанию массивы будут анализироваться в java.util.List экземплярах ".

0 голосов
/ 12 апреля 2010

Может быть

 System.out.println( ((Object[]) request.get("arguments")) [0]);

? Вы также можете попробовать привести его к String[].

В любом случае, существуют более цивилизованные способы синтаксического анализа JSON, такие как http://code.google.com/p/google-gson/.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...