以这个简短的JSON为例,使用RestAssured
从API响应中获取String
:
{
"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>
感谢您的帮助!
您将无法使用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;
}
我建议使用更可定制的库,如杰克逊或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
}
如果您愿意,它还将映射到对象。
一种方法是使用字符串而不是数字,例如
{
"buyAmount": "473935.00",
"sellAmount":"585538.30",
}
如果您正在使用BigDecimal
请使用toPlainString
方法来避免删除尾随零