例如,使用String
从API响应中将此短JSON视为RestAssured
:
{
"id": "4d27afb18bfa4eb5917beee9aaddfa76",
"hedgeId": 205598,
"sellCurrency": "USD",
"buyCurrency": "EUR",
"buyAmount": 473935.00,
"sellAmount": 585538.30,
}
每当我JSONObject foo = new JSONObject(thatStringAbove);
时,都会创建此实例:
{
"hedgeId": 205598,
"buyAmount": 473935,
"sellAmount": 585538.3,
"id": "4d27afb18bfa4eb5917beee9aaddfa76",
"sellCurrency": "USD",
"buyCurrency": "EUR"
}
请注意,数量节点的尾随零被剥离。对我来说这看起来像个错误,但有没有人知道如何防止这种情况发生的变通方法/解决方案?
很少说明:
Maven依赖:
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20170516</version>
</dependency>
感谢帮助!
答案 0 :(得分:1)
您将无法使用 org.json 库执行此操作。它故意在序列化过程中删除尾随零。
来自相关方法JSONObject.numberToString()
:
public static String numberToString(Number number) throws JSONException {
if (number == null) {
throw new JSONException("Null pointer");
}
testValidity(number);
// Shave off trailing zeros and decimal point, if possible.
String string = number.toString();
if (string.indexOf('.') > 0 && string.indexOf('e') < 0
&& string.indexOf('E') < 0) {
while (string.endsWith("0")) {
string = string.substring(0, string.length() - 1);
}
if (string.endsWith(".")) {
string = string.substring(0, string.length() - 1);
}
}
return string;
}
我建议使用更可自定义的库,例如 jackson 或 gson 。
Gson将尊重该数字的比例,让您在不丢失尾随零的情况下执行往返行程:
Gson gson = new GsonBuilder().setPrettyPrinting().create();
JsonObject jsonObject = gson.fromJson(in, JsonObject.class);
System.out.println(gson.toJson(jsonObject));
输出:
{
"id": "4d27afb18bfa4eb5917beee9aaddfa76",
"hedgeId": 205598,
"sellCurrency": "USD",
"buyCurrency": "EUR",
"buyAmount": 473935.00,
"sellAmount": 585538.30
}
如果您愿意,它也会映射到对象。
答案 1 :(得分:0)
单向是使用字符串而不是数字,例如
{
"buyAmount": "473935.00",
"sellAmount":"585538.30",
}
如果您使用BigDecimal
使用toPlainString
方法以避免删除尾随零