2010-04-02 37 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]”??