gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 10:21:54 24 4
gpt4 key购买 nike

我想解析一些作为数字(不带引号)发送的 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.json . getLong方法不支持 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com