You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 04:35:18