我想以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对象的值提取为字符串(或任何其他不会破坏它的方法)?
发布于 2020-03-23 15:10:57
假设使用是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
}
}发布于 2020-03-23 15:04:32
据我所知,没有办法将json数字读入字符串(只要使用标准库)。
但我认为,最后,你想要处理数字,所以,把它们转换成字符串可能不方便。
相反,您可以读取为json-number,然后处理数字而不是字符串:
final JsonNumber jsonNumber = data.getJsonNumber("number");
System.out.println(jsonNumber.longValue());
// returns: 4294967294从现在开始,您可以根据需要将其转换为uint32。
希望这能有所帮助。
https://stackoverflow.com/questions/60815401
复制相似问题