解析 JSON uint32/uint64 Java 中的数字
Parse JSON uint32/uint64 numbers in Java
我想解析一些作为数字(不带引号)发送的 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 对象中提取值作为字符串(或任何其他不会破坏它的方法)?
据我所知,无法将 json-numbers 读取为字符串(只要使用标准库)。
但我想,最后,你想要处理数字,所以,将它们转换成字符串可能不方便。
相反,您可以读取为 json-number,然后处理数字而不是字符串:
final JsonNumber jsonNumber = data.getJsonNumber("number");
System.out.println(jsonNumber.longValue());
// returns: 4294967294
从这里开始,您可以根据需要将其转换为 uint32。
希望对您有所帮助。
假设使用的库是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
}
}
我想解析一些作为数字(不带引号)发送的 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 对象中提取值作为字符串(或任何其他不会破坏它的方法)?
据我所知,无法将 json-numbers 读取为字符串(只要使用标准库)。
但我想,最后,你想要处理数字,所以,将它们转换成字符串可能不方便。
相反,您可以读取为 json-number,然后处理数字而不是字符串:
final JsonNumber jsonNumber = data.getJsonNumber("number");
System.out.println(jsonNumber.longValue());
// returns: 4294967294
从这里开始,您可以根据需要将其转换为 uint32。
希望对您有所帮助。
假设使用的库是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
}
}