首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Java解析JSON uint32 32/uint32 64数字

用Java解析JSON uint32 32/uint32 64数字
EN

Stack Overflow用户
提问于 2020-03-23 14:22:36
回答 2查看 1.7K关注 0票数 2

我想以uint32和uint64格式解析一些以数字形式发送的JSON数据(没有引号),然后在java中使用它们。

我发现可以通过parseUnsignedInt( string )方法将它们存储为无符号整数,但问题是,由于缺少引号,所以无法将json值作为字符串。如果我将其解析为int,则返回的值在我有机会转换它之前是错误的。

示例:

代码语言:javascript
复制
// data is a JSONObject containing: {"number" : 4294967294}
...
System.out.println(data.getInt("number"));
// returns: -10001
System.out.println(Integer.parseUnsignedInt(data.getString("number")));
// returns: JSONObject["number"] not a string.
System.out.println(Integer.parseUnsignedInt(Integer.toString(data.getInt("number"))));
// returns: Illegal leading minus sign on unsigned string -10001.

是否有方法将json对象的值提取为字符串(或任何其他不会破坏它的方法)?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-03-23 15:10:57

假设使用是org.json的库。getLong方法不能支持uint64。在这种情况下,我们应该使用getBigInteger

代码语言:javascript
复制
import org.json.JSONObject;

public class JsonParseLargeInteger {
    public static void main(String[] args) {
        String uint32MaxValueJson = "{\"number\" : 4294967296}";
        JSONObject uint32MaxValueJsonObject = new JSONObject(uint32MaxValueJson);
        System.out.println(((Integer) uint32MaxValueJsonObject.getInt("number")).toString());
        // Result is 0
        System.out.println(((Long) uint32MaxValueJsonObject.getLong("number")).toString());
        // Result is 4294967296
        System.out.println(uint32MaxValueJsonObject.getBigInteger("number").toString());
        // Result is 4294967296

        String uint64MaxValueJson = "{\"number\" : 18446744073709551615}";
        JSONObject uint64MaxValueJsonObject = new JSONObject(uint64MaxValueJson);
        System.out.println(((Integer) uint64MaxValueJsonObject.getInt("number")).toString());
        // Result is -1
        System.out.println(((Long) uint64MaxValueJsonObject.getLong("number")).toString());
        // Result is -1
        System.out.println(uint64MaxValueJsonObject.getBigInteger("number").toString());
        // Result is 18446744073709551615
    }
}
票数 1
EN

Stack Overflow用户

发布于 2020-03-23 15:04:32

据我所知,没有办法将json数字读入字符串(只要使用标准库)。

但我认为,最后,你想要处理数字,所以,把它们转换成字符串可能不方便。

相反,您可以读取为json-number,然后处理数字而不是字符串:

代码语言:javascript
复制
final JsonNumber jsonNumber = data.getJsonNumber("number");
System.out.println(jsonNumber.longValue());
// returns: 4294967294

从现在开始,您可以根据需要将其转换为uint32。

希望这能有所帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60815401

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档