Как получить List <Long>из строки json, используя сериализатор FlexJson Json на Java? - PullRequest
0 голосов
/ 02 апреля 2010
String episodeIds = "['abc', '123', '456']";
     List<Long> list = new JSONDeserializer<ArrayList<Long>>().use(null, ArrayList.class).deserialize(episodeIds);
     System.out.println(list);

Этот код возвращает строку, но должен возвращать LONG)

Ответы [ 3 ]

1 голос
/ 02 апреля 2010

я не думаю, что вам нужна .use(null, ArrayList.class) часть второй строки:

String episodeIds = "['abc', '123', '456']";
 List<Long> list = new JSONDeserializer<ArrayList<Long>>().deserialize(episodeIds);
 System.out.println(list);

С уважением,

0 голосов
/ 01 июля 2010

String episodeIds = "['abc', '123', '456']";

  1. 'abc' не может быть преобразовано в число соответственно. длинный
  2. не должны ли идентификаторы эпизода в строке JSON быть более похожими на: "[777, 123, 456]" ??
0 голосов
/ 09 апреля 2010

Не зная FlexJSON лучше, я не могу быть уверен, но проблема, которую я подозреваю, связана с стиранием типа Java (узнайте больше, если вы не знакомы с этой концепцией - это просто означает, что байт-код Java имеет очень мало информация об объявленных типовых типах, например, что вы делаете здесь). Из-за этого библиотека НЕ ​​МОЖЕТ ЗНАТЬ ожидаемый тип, который вы даете (> или подразумеваемый тип возвращаемого значения); все, что он видит, является ArrayList (так как ArrayList.class не имеет информации о типовых типах); и так как вы даете ему JSON со строками, он должен предполагать, что вам нужен список строк.

Так как обойти это? Может быть, у FlexJson есть способ дать информацию с поддержкой дженериков, чтобы обойти это. Если нет, вы можете создать подкласс ArrayList, что-то вроде 'public class MyList extends ArrayList', передать MyList.class методу. Теперь он ДОЛЖЕН иметь возможность определить фактически ожидаемый тип.

Или, если это не работает, попробуйте другую библиотеку Java JSON (Джексон или GSON). Они могут сделать это преобразование (я знаю, что Джексон может, я ожидаю, что GSON также сможет).

...