DataWeave 是否保持 JSON 属性的顺序?
Does DataWeave keeps the order of JSON properties?
我在 DataWeave 文档中看不到它是否保持属性的顺序。例如在这段代码之后:
%dw 1.0
%output application/json
---
{
giftcards : payload map {
"currency" : $.currency,
"giftcardId" : $."_id",
"amount" : $.price
}
}
我们能否期望在响应中获得以下属性序列:
- 货币
- giftcardId
- 数量
简短答案是 "Yes",但一般答案是 "No"。
即使 Mule 也应该产生 JSON 与 DateWeave 中定义的完全一致,但这并不意味着其他转换不会破坏此顺序。对 Map 的简单转换和返回将根据特定的 Map 实现更改它。它可以是 Hashtable 或有序集合以保持 key/value 对,因此顺序自然会被打破。
底线 - 因为您不知道数据会有什么转换 - 不要依赖原始顺序或某些中间阶段顺序。始终由自己控制。例如 - 从集合中提取时按字母顺序排列键。
它将保留您的数据顺序。因为 dataweave 下的所有声明都在输出指令下。输出指令指定转换中的输出类型,使用 content/type 指定。只能指定一个输出,然后在 DataWeave 主体中定义此输出的结构。
我在 DataWeave 文档中看不到它是否保持属性的顺序。例如在这段代码之后:
%dw 1.0
%output application/json
---
{
giftcards : payload map {
"currency" : $.currency,
"giftcardId" : $."_id",
"amount" : $.price
}
}
我们能否期望在响应中获得以下属性序列:
- 货币
- giftcardId
- 数量
简短答案是 "Yes",但一般答案是 "No"。 即使 Mule 也应该产生 JSON 与 DateWeave 中定义的完全一致,但这并不意味着其他转换不会破坏此顺序。对 Map 的简单转换和返回将根据特定的 Map 实现更改它。它可以是 Hashtable 或有序集合以保持 key/value 对,因此顺序自然会被打破。
底线 - 因为您不知道数据会有什么转换 - 不要依赖原始顺序或某些中间阶段顺序。始终由自己控制。例如 - 从集合中提取时按字母顺序排列键。
它将保留您的数据顺序。因为 dataweave 下的所有声明都在输出指令下。输出指令指定转换中的输出类型,使用 content/type 指定。只能指定一个输出,然后在 DataWeave 主体中定义此输出的结构。