我目前正在尝试在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
...
]
答案 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。