我正在转换一个Json文档,该文档包含一个值为30000000.00的数字字段。
我正在使用以下规范在Java中进行转换(在相关行之后已被截断):
StringBuilder jsltSpec = new StringBuilder();
jsltSpec.append("import \"http://jslt.schibsted.com/2018/experimental\" as exp ");
jsltSpec.append("def timeVal(obj) " +
"if ($obj) " +
"if (size($obj) == 5) " +
"format-time(parse-time(join($obj, \"-\"), \"yyyy-M-d-HH-mm\"), \"yyyy-MM-dd'T'HH:mm:ss.SSSX\") " +
"else " +
"format-time(parse-time(join($obj, \"-\"), \"yyyy-M-d-HH-mm-ss\"), \"yyyy-MM-dd'T'HH:mm:ss.SSSX\") " +
"else " +
"null ");
jsltSpec.append("def dateVal(obj) " +
"if ($obj) " +
"format-time(parse-time(join($obj, \"-\"), \"yyyy-M-d\"), \"yyyy-MM-dd'T'HH:mm:ss.SSSX\") " +
"else " +
"null ");
jsltSpec.append("let nestedTran = " +
"[ " +
"for (.responseBody.eelaccountsList) " +
"let sa = " +
"{ " +
"\"Transactions\" : " +
"[ " +
"for (.transactions) " +
"let st = " +
"{ " +
"\"@type\" : .\"@type\"," +
"\"accountId\" : .accountId, " +
"\"amount\" : .amount, " +
"\"category\" : .category, " +
产生的数量字段为3.0E7,下游消费者不接受。
有人知道是否存在可用于抑制指数符号的格式化功能吗?
谢谢
大卫
答案 0 :(得分:0)
这实际上不是JSLT问题。由于您的转换内容为:
"amount" : .amount,
JSLT根本不更改金额。输出中将传递与JSLT相同的JsonNode
对象。从字面上看是同一对象-它们将与==
相等。
这是关于Jackson如何序列化十进制文字的信息。
请注意,3.0E7
和30000000.00
是相同的数字,因此这纯粹是一个语法问题。实际的基础编号是相同的。
您可以尝试在ObjectMapper
中设置this feature,以告诉杰克逊不要使用科学计数法。