java - 在Java中解析JSON uint32/uint64数字

标签 java json uint

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

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

示例:

// 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 对象中提取值作为字符串(或任何其他不会破坏它的方式)?

最佳答案

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

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
    }
}

关于java - 在Java中解析JSON uint32/uint64数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60815401/

相关文章:

java - jFileChooser 与任务计划程序一起使用时不工作

php - jquery 甘特图插件

c# - 将 UInt32 转换为 Int32 : Different compiler results

java - 如何使用新的 Android 应用程序更新来更新现有的 SQLite 数据库表数据?

java - 无法通过 v4.app.Fragment 导入解决 ResolveFragmentTransaction.add() 问题

javascript - 从 json 对象创建定义列表

在 C 中将 Uint16 转换为字符串

Swift:为什么 UInt.max == -1

Java:服务器端类上的静态字符串数组

ruby - 类型错误:无法将 Net::HTTPOK 转换为字符串