为什么JSONParser总是返回一个double?

时间:2016-05-27 07:56:54

标签: java codenameone

我目前正在尝试在api上使用代号的JSONParser。

在后端有一个long值发送,但在我的应用程序中有一个双值解析。

我知道有一种方法可以说 setUseLongs(boolean),我已经将该字段设置为true。如果我实例化解析器并调用 System.out.println(p.isUseLong),则会打印 true

但是,该字段仍然被解析为double值,尽管它是作为long值发送的。

我在这里缺少什么?

以下是代码:

@Override
protected void readResponse(InputStream input) throws IOException {
    JSONParser.setUseLongs(true);
    JSONParser p = new JSONParser();
    System.out.println(p.isUseLongs());  //true and a Warning to use static methods static...
    Map<String,Object> data = p.parseJSON(new InputStreamReader(input));
    System.out.println(data);  //long value already printed as double
}

修改

这是JSON字符串(打印在最后一行,解析器输出):

[
{createdByUserId=1364.0, //should be int
createdAtDate=1.464330197735E12, //should be long
deleted=false, //boolean, correct
updatedAtDate=1.464330197735E12, //long 
name=Hallo1, //String, correct
...
]

1 个答案:

答案 0 :(得分:3)

//Assuming all elements are double
createdByUserId.intvalue();
createdAtDate.longValue();

JSONParser有一个setUseLongs方法,它将长对象用于long值,double用于double值。默认情况下,这是为了兼容性以及由于Codename One的不便而关闭。

目前Codename One并不包含Number类,它是所有数值的基类,所以通常在标准Java中你会做类似的事情:

long l = ((Number)val).longValue();

这更有意义,因为您不依赖于解析器返回的内容。不幸的是,此时此功能尚未得到支持,但我添加了一个问题来解决here