2010-04-02 42 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)如何使用Java中的FlexJson Json序列化程序從json字符串獲取列表<Long>?

+0

沒有解釋的代碼示例有點難以解決。有錯誤嗎?你只是要求驗證你的代碼? ...? – 2010-04-02 11:41:26

+0

此代碼不能正常工作 – alexn 2010-04-02 12:00:46

+0

一個建議:修復String; JSON不允許單引號(不像XML)。這可能是FlexJson接受它,但許多其他解析器不(如此)。 – StaxMan 2010-04-09 18:08:36

回答

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 2010-04-02 11:52:21

+0

'abc'長嗎?也許這是問題。 – scriptmonster 2010-04-02 12:16:19

0

不知道FlexJSON更好的我不能確定,但​​是我懷疑是Java Type Erasure引起的問題(如果你對這個概念不熟悉,那麼谷歌就更多了 - 它只是意味着Java字節碼關於聲明的泛型類型的信息很少,就像你在這裏做的那樣)。由於這個原因,庫不知道你要給予的期望類型(>,或隱含的返回類型);它看到的只是ArrayList(因爲ArrayList.class沒有泛型類型信息);並且由於您使用字符串爲它提供JSON,因此它必須假定您需要字符串列表。

那麼如何解決這個問題呢?也許FlexJson有一種方法可以給泛型啓用的信息解決這個問題。如果沒有,你可以子類ArrayList,像'公共類MyList擴展ArrayList',傳遞MyList.class方法。現在它應該能夠確定實際的預期類型。

或者,如果這不起作用,請嘗試另一個Java JSON庫(Jackson或GSON)。他們可以做這種轉換(我知道傑克遜可以,我希望GSON也能做到)。

+0

還有一件事:你給的內容不是JSON。 JSON使用雙引號,而不是單引號。另外,'abc'不是一個數字,所以會失敗。除此之外,如果您提供了適當的JSON內容,傑克遜和GSON可以按預期處理它。 – StaxMan 2010-04-09 18:07:09

0

String episodeIds =「['abc','123','456']」;

  1. 'abc'不能被轉換爲數字或數字。長
  2. 不應該在JSON字符串中的情節ID更像是:「[777,123,456]」??