2010-04-02 1 views
0
String episodeIds = "['abc', '123', '456']"; 
    List<Long> list = new JSONDeserializer<ArrayList<Long>>().use(null, ArrayList.class).deserialize(episodeIds); 
    System.out.println(list); 

Этот код возвращает строку, но должен возвращать LONG)Как получить список <Long> из строки json с использованием сериализатора FlexJson Json в Java?

+0

Образец кода без каких-либо объяснений немного сложно адресовать. Есть ли ошибка? Вы просто просите подтверждения своего кода? ...? –

+0

этот код не работает правильно – alexn

+0

Одно предложение: исправить строку; JSON не допускает одинарных кавычек (в отличие от XML). Возможно, FlexJson принимает это, но многие другие парсеры не делают (правильно). – StaxMan

ответ

1

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

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

С уважением,

+0

Спасибо, но это не работает без использования) – alexn

+0

does 'abc' long? возможно, это проблема. – scriptmonster

0

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

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

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

+0

Еще одна вещь: контент, который вы даете, не является JSON. JSON использует двойные кавычки, а не одинарные кавычки. Кроме того, «abc» не является числом, так что это не удастся. Помимо этого, если вы предоставили надлежащий контент JSON, Джексон и GSON могли бы справиться с этим, как и ожидалось. – StaxMan

0

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

  1. «а» не могут быть преобразованы в числе соответственно. long
  2. Не должен ли идентификатор эпизода в строке JSON быть более похожим: "[777, 123, 456]" ??