从下面的JSON:

{
   "query":{
      "ids":[
         95445875
      ],
      "group": "day",
      "dimensions":[
         "ym:s:date",
         "ym:s:lastSignUTMSource",
         "ym:s:lastSignUTMMedium",
         "ym:s:lastSignUTMCampaign",
         "ym:s:lastSignUTMContent",
         "ym:s:lastSignUTMTerm"
      ],
      "metrics":[
         "ym:s:goal315094773visits",
         "ym:s:goal318656867visits"
      ]
   },
   "data":[
      {
         "dimensions":[
            {
               "name":"2024-01-12"
            },
            {
               "name":"5ka"
            },
            {
               "name":"SITE"
            },
            {
               "name":"5ka_HR_nov23"
            },
            {
               "name":"button"
            },
            {
               "name":"click"
            }
         ],
         "metrics":[
            64.0,
            2.0
         ]
      },
      {
         "dimensions":[
            {
               "name":"2024-01-13"
            },
            {
               "name":"5ka"
            },
            {
               "name":"SITE"
            },
            {
               "name":"5ka_HR_nov23"
            },
            {
               "name":"button"
            },
            {
               "name":"click"
            }
         ],
         "metrics":[
            13.0,
            0.0
         ]
      },
      {
         "dimensions":[
            {
               "name":"2024-01-13"
            },
            {
               "name":"Yandex"
            },
            {
               "name":"SEM"
            },
            {
               "name":"5ka_HR_oct-dec'23"
            },
            {
               "name":"TGB"
            },
            {
               "name":"shop"
            }
         ],
         "metrics":[
            5.0,
            4.0
         ]
      },
      {
         "dimensions":[
            {
               "name":"2024-01-12"
            },
            {
               "name":"Yandex"
            },
            {
               "name":"SEM"
            },
            {
               "name":"5ka_HR_oct-dec'23"
            },
            {
               "name":"TGB"
            },
            {
               "name":"shop"
            }
         ],
         "metrics":[
            3.0,
            0.0
         ]
      }
   ],
   "total_rows":4
}

我期望得到这样的结果:

[
   {
      "counter_id":95445875,
      "date_of_visit":"2024-01-12",
      "utm_source":"5ka",
      "utm_medium":"SITE",
      "utm_campaign":"5ka_HR_nov23",
      "utm_content":"button",
      "utm_term":"click",
      "goal_id":"315094773",
      "conversions":64.0
   },
   {
      "counter_id":95445875,
      "date_of_visit":"2024-01-12",
      "utm_source":"5ka",
      "utm_medium":"SITE",
      "utm_campaign":"5ka_HR_nov23",
      "utm_content":"button",
      "utm_term":"click",
      "goal_id":"318656867",
      "conversions":2.0
   },
   {
      "counter_id":95445875,
      "date_of_visit":"2024-01-13",
      "utm_source":"5ka",
      "utm_medium":"SITE",
      "utm_campaign":"5ka_HR_nov23",
      "utm_content":"button",
      "utm_term":"click",
      "goal_id":"315094773",
      "conversions":13.0
   },
   {
      "counter_id":95445875,
      "date_of_visit":"2024-01-13",
      "utm_source":"5ka",
      "utm_medium":"SITE",
      "utm_campaign":"5ka_HR_nov23",
      "utm_content":"button",
      "utm_term":"click",
      "goal_id":"318656867",
      "conversions":0.0
   },
   {
      "counter_id":95445875,
      "date_of_visit":"2024-01-12",
      "utm_source":"Yandex",
      "utm_medium":"SEM",
      "utm_campaign":"5ka_HR_oct-dec'23",
      "utm_content":"TGB",
      "utm_term":"shop",
      "goal_id":"315094773",
      "conversions":5.0
   },
   {
      "counter_id":95445875,
      "date_of_visit":"2024-01-12",
      "utm_source":"Yandex",
      "utm_medium":"SEM",
      "utm_campaign":"5ka_HR_oct-dec'23",
      "utm_content":"TGB",
      "utm_term":"shop",
      "goal_id":"318656867",
      "conversions":4.0
   },
   {
      "counter_id":95445875,
      "date_of_visit":"2024-01-13",
      "utm_source":"Yandex",
      "utm_medium":"SEM",
      "utm_campaign":"5ka_HR_oct-dec'23",
      "utm_content":"TGB",
      "utm_term":"shop",
      "goal_id":"315094773",
      "conversions":3.0
   },
   {
      "counter_id":95445875,
      "date_of_visit":"2024-01-13",
      "utm_source":"Yandex",
      "utm_medium":"SEM",
      "utm_campaign":"5ka_HR_oct-dec'23",
      "utm_content":"TGB",
      "utm_term":"shop",
      "goal_id":"318656867",
      "conversions":0.0
   }
]

Explanation

从SOURCE JSON我需要:

  • 来自query.ids数组的ID,并调用新属性counter_id
  • 比较并联接数组query.dimensions中的值和数组data.dimensions中的值,但为它们指定新名称.从query.dimensions开始的值应该是从data.dimensions开始的值的属性名称(我们需要这样做才能保持正确的顺序).在此之后,我想更改这些名称:ym:s:date应该是date_of_visit,ym:s:lastSignUTMSource应该是utm_sourceym:s:lastSignUTMMediumutm_mediumym:s:lastSignUTMCampaignutm_campaignym:s:lastSignUTMContentutm_contentym:s:lastSignUTMTermutm_term.
  • query.metrics中的值与数组data.metrics中的值进行比较和联接.而是数组query.metrics中的每个元素.F.E.应该写成goal_id:315094773(我们需要目标访问之间的价值).从data.metrics开始的值应写为conversions.

因此,我希望得到如上所述的JSON结果.

我费了很大劲才拿到这个震撼的配置,但它根本不起作用. 我的知识绝对不够(

JOLT

推荐答案

可以通过以下变换展平:

[
  {
    "operation": "shift",
    "spec": {
      "data": { // loop through all the "data"
        "*": { // indexes of the "data"
          "metrics": { // loop through all the "metrics"
            "*": { // indexes of the "metrics"
              "@4,query.ids[0]": "&3_&.counter_id",
              "@2,dimensions[0].name": "&3_&.date_of_visit",
              "@2,dimensions[1].name": "&3_&.utm_source",
              "@2,dimensions[2].name": "&3_&.utm_medium",
              "@2,dimensions[3].name": "&3_&.utm_campaign",
              "@2,dimensions[4].name": "&3_&.utm_content",
              "@2,dimensions[5].name": "&3_&.utm_term",
              "@4,query.metrics[&]": {
                "*goal*visits": {
                  "$(0,2)": "&5_&2.goal_id" // extract the value of 2nd replacement of asterisks from the key just after going upper (0th)level
                }
              },
              "@": "&3_&.conversions" // the values of the "metrics"
            }
          }
        }
      }
    }
  },
  { // get rid of the object keys
    "operation": "shift",
    "spec": {
      "*": ""
    }
  }
]

Json相关问答推荐

JOLT转换,将属性复制到同级别的dict中

PowerShell脚本-替换json数组(转义$var将被视为不带双引号的文本)

kotlinx-serialization:如何将具有不同类型对象的JsonArray转换为同一个Class

如何将加权边列表导出到JSON树?

NIFI-我需要数组的信息,但只需要第一个信息

使用 JOLT 将日期格式转换为 JSON

将 std::可选值存储到 json 文件 C++

Jolt 规范将父对象中的所有键应用于数组中的所有对象

将 json 文件转换为 json 对象会打乱对象的顺序

如何在 wso2 中组合 2 个 json 有效负载?

字典和对象的模型创建问题

Jolt - 在同一级别添加时组合值的问题

如何使用 gson 调用默认反序列化

在 JSON API Wordpress 上启用 CORS

规范化 JSON 文件

将带有数据和文件的 JSON 发布到 Web Api - jQuery / MVC

验证和格式化 JSON 文件

如何在 Python 中合并两个 json 字符串?

在 .NET 中缩小缩进的 JSON 字符串

类型是接口或抽象类,不能实例化