多于 6 位小数的数字转换为指数形式

Number with more than 6 decimals is converted into exponential form

让我保持简单

Input:
{
  "latitude": 0.0000000,
  "longitude": 0.00000000
}

dw代码:

output application/json
---
{
  location: {
    "lat": payload.latitude,
    "long": payload.longitude
  }
}

预期结果:

{
  location: {
    "lat": 0.00000000,
    "long": 0.00000000
  }
}

实际结果:

{
  location: {
    "lat": 0E-8,
    "long": 0E-8
  }
}

此外,

对于 0.00000000 以外的输入,代码工作正常。我观察到如果小数位数大于 6 位且所有数字均为 0,它将数字转换为指数。

payload.latitude as String {“format”:”0.0000000”} 你可以输出为 application/java

使用 json 对象更新

%dw 2.0
output application/json
---
  location: {
    "lat": payload.latitude as String {"format":"0.0000000"},
    "long": payload.longitude as String {"format":"0.0000000"}
  }

问题实际上是您似乎要求 JSON 数字具有特定格式。 JSON 没有定义数字的格式。还要考虑到一些事情对实现是开放的,比如表示数字的精度和限制。有关某些规格,请参阅 https://www.rfc-editor.org/rfc/rfc7159#page-6 or https://www.json.org/json-en.html

我的理解是,要使任何合理的 JSON 实现可互操作,那么 0.00000000 和 0E-8 应该被同等接受,但您不应期望能够 select 一种格式优于另一种格式。我不确定为什么它不只输出 0。它也应该被接受为相同的值。