如何编写JSONata实现指定格式的日期结构转换?
满足需求的JSONata表达式
注意事项
首先需要明确:标准JSON不允许对象存在重复键,通用解析器通常会忽略或覆盖前面的重复键。如果你提供的期望输出是笔误,实际需要的是包含多个Date对象的数组,可直接采用「合法JSON数组方案」;若你确实需要生成含重复键的结构(仅适用于支持重复键的特定场景),可使用「重复键对象方案」。
方案1:合法JSON数组(推荐)
此方案生成符合JSON规范的数组结构,避免重复键冲突问题:
[ (Data.CREATED ? { "Date": { "Created": Data.CREATED } } : $null), { "Date": { "Updated": Data.EDITED } } ] ~> $filter(function($v) { $v != $null })
测试场景1:含CREATED和EDITED字段的数据源
输入:
{ "Data": { "CREATED": "2022-04-08", "EDITED": "2023-04-08" } }
输出:
[ { "Date": { "Created": "2022-04-08" } }, { "Date": { "Updated": "2023-04-08" } } ]
测试场景2:仅含EDITED字段的数据源
输入:
{ "Data": { "EDITED": "2023-04-08" } }
输出:
[ { "Date": { "Updated": "2023-04-08" } } ]
方案2:重复键对象(非标准JSON)
若因特定需求必须生成含重复Date键的对象(注意:此结构不符合JSON规范,多数解析器会仅保留最后一个键值对),可使用以下表达式:
$reduce( [ (Data.CREATED ? { "Date": { "Created": Data.CREATED } } : $null), { "Date": { "Updated": Data.EDITED } } ] ~> $filter(function($v) { $v != $null }), function($acc, $item) { $acc & $item }, {} )
测试场景1输出(仅在支持重复键的工具中可见完整结构):
{ "Date": { "Created": "2022-04-08" }, "Date": { "Updated": "2023-04-08" } }
测试场景2输出:
{ "Date": { "Updated": "2023-04-08" } }
内容的提问来源于stack exchange,提问作者topto
相关产品推荐
相关产品推荐

