我想解析一些以数字(不带引号)发送的 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/