如何使用 JSONata 更改 JSON 响应

How to use JSONata to change JSON response

我正在使用 API returns 以下 JSON:

{
  "rows": [
    {
      "keys": [
        "search term 1",
        "https://example.com/article-about-keyword-1/"
      ],
      "clicks": 24,
      "impressions": 54,
      "ctr": 0.4444444444444444,
      "position": 2.037037037037037
    },
    {
      "keys": [
        "search term 2",
        "https://example.com/article-about-keyword-2/"
      ],
      "clicks": 17,
      "impressions": 107,
      "ctr": 0.1588785046728972,
      "position": 2.663551401869159
    }
],
  "responseAggregationType": "byPage"
}

我正在尝试使用 JSONata 将其更改为更像这样的内容:

 {
  "rows": [
    {
      "keyword": search term 1,
      "URL": https://example.com/article-about-keyword-1/,
      "clicks": 24,
      "impressions": 54,
      "ctr": 0.4444444444444444,
      "position": 2.037037037037037
    },
    {
      "keyword": search term 2,
      "URL": https://example.com/article-about-keyword-2/,
      "clicks": 17,
      "impressions": 107,
      "ctr": 0.1588785046728972,
      "position": 2.663551401869159
    }
],
  "responseAggregationType": "byPage"
}

基本上,我正在尝试将 'keys' 部分分解为 'Keyword' 和 'URL'。

我已经在 https://try.jsonata.org/ 玩了一段时间了,但我并没有走多远。任何帮助表示赞赏。

拆分键数组应该可以通过按索引访问每个元素来实现(假设关键字和 URL 保证出现在同一索引上)。

这是从源文件转换为所需目标形状的完整 JSONata 表达式:

{
  "rows": rows.{
    "keyword": keys[0],
    "URL": keys[1],
    "clicks": clicks,
    "impressions": impressions,
    "ctr": ctr,
    "position": position 
  }[],
  "responseAggregationType": responseAggregationType
}

顺便说一下,我使用我的团队在 Stedi 构建的 Mappings tool 在 2 分钟内构建了这个解决方案。