我从谷歌分析API收到JSON.它看起来是这样的:

{
  "dimensionHeaders": [
    {
      "name": "date"
    },
    {
      "name": "sessionMedium"
    },
    {
      "name": "sessionCampaignName"
    }
  ],
  "metricHeaders": [
    {
      "name": "sessions"
    },
    {
      "name": "bounceRate"
    },
    {
      "name": "newUsers"
    }
  ],
  "rows": [
    {
      "dimensionValues": [
        {
          "value": "20230526"
        },
        {
          "value": "organic"
        },
        {
          "value": "RV_olov_23"
        }
      ],
      "metricValues": [
        {
          "value": "47"
        },
        {
          "value": "1"
        },
        {
          "value": "40"
        }
      ]
    },
    {
      "dimensionValues": [
        {
          "value": "20230527"
        },
        {
          "value": "online_plus"
        },
        {
          "value": "Borhoni_aqua_23_may"
        }
      ],
      "metricValues": [
        {
          "value": "31"
        },
        {
          "value": "0.25"
        },
        {
          "value": "10"
        }
      ]
    }
  ],
  "rowCount": 2
}

我需要执行复杂的操作.以...Headers结尾的数组应与以....Values结尾的数组匹配.那么,我们到底应该比较什么:

  • 数组dimensionHeaders中的Values应与数组dimensionValues中的值匹配(在rows数组中);
  • metricHeaders中的Values应与数组metricValues中的值匹配.

最后,这意味着...Headers个数组中的values个--是关键字名称,...Values个数组中的values个--是这些新关键字的values个.

因此,让我们来看看我们应该得到什么:

[
  {
    "date": "20230526",
    "sessionMedium": "organic",
    "sessionCampaignName": "RV_olov_23",
    "sessions": 47,
    "bounceRate": 1,
    "newUsers": 40
  },
  {
    "date": "20230527",
    "sessionMedium": "online_plus",
    "sessionCampaignName": "Borhoni_aqua_23_may",
    "sessions": 31,
    "bounceRate": 0.25,
    "newUsers": 10
  }
]

我不知道到底有没有可能使用Jolt.如有任何帮助,我将不胜感激!

推荐答案

您可以使用此规范:

[
  {
    "operation": "shift",
    "spec": {
      "rows": {
        "*": {
          "dimensionValues": {
            "*": {
              "value": "[&3].@(5,dimensionHeaders[&1].name)"
            }
          },
          "metricValues": {
            "*": {
              "value": "[&3].@(5,metricHeaders[&1].name)"
            }
          }
        }
      }
    }
  }
]

如果需要将字符串号更改为整型,可以在上述规范中添加以下规范:

{
  "operation": "modify-overwrite-beta",
  "spec": {
    "*": {
      "sessions": "=toInteger",
      "bounceRate": "=toDouble",
      "newUsers": "=toInteger"
    }
  }
}

Json相关问答推荐

将json数组反序列化为选项 struct

JSON字符串处理注入引号

替换字符串中特殊字符的Jolt变换

在scala中将字符串列转换为 struct 的JSON映射

在ConvertFrom-Json之后需要从PowerShell对象中获取数据

PowerShell:使用JSON原生的Short命令处理JSON?

将 REST API - json 输出转换为表 Power BI

使用 jolt 将对象数组转换为数组

如何从 JSON 中获取数据并通过 vb6 在网格中显示

为什么在我们有 json_encode 时使用 CJSON 编码

反序列化大型 json 对象的 JsonMaxLength 异常

谷歌浏览器不允许我放置断点

什么 Python 框架用于没有前端的 REST/JSON Web 服务?

将错误消息作为 JSON 对象发送

我们可以使用 JSON 作为数据库吗?

如何在不消除对象歧义的情况下使用 circe 解码 ADT

jQuery JSON 响应总是触发 ParseError

JSON日期到Java日期?

Javascript:如何判断 AJAX 响应是否为 JSON

使用 JavaScriptSerializer() 反序列化 JSON 文件