当前位置: 首页 > 知识库问答 >
问题:

如何用JOLT转换复杂的JSON嵌套数组?

宿衡虑
2023-03-14

我试图根据第二个嵌套数组中的值的数量将嵌套数组转换为对象。我似乎无法获取值字段的数量并将其用作规范中的键。现在这是我的输入JSON文件

{
 "meta": {
   "regId": "us",
   "cId": "SomeProduct",
   "weId": 15

 },
 "data": {
   "name": "R",
   "details": {
     "headers": [
       "id",
       "cityId",
       "cityName"

     ],
     "values": [
       [
         1539,
         17,
         "Moskow"
       ],
       [
         1539,
         17,
         "Berlin"
       ],
       [
        1539,
         17,
         "Vienna"
       ]
     ]
   }
 }
}

这是我想要的JSON输出:

[
    {"regId": "us",
        "cId": "SomeProduct",
        "weId": 15,
        "name":"R",
        "id":1539,
        "cityId":17,
        "cityName":Moskow
    },
    {"regId": "us",
        "cId": "SomeProduct",
        "weId": 15,
        "name":"R",
        "id":1540,
        "cityId":11,
        "cityName":Berlin
    },
    {"regId": "us",
        "cId": "SomeProduct",
        "weId": 15,
        "name":"R",
        "id":151,
        "cityId":18,
        "cityName":Vienna
    }
]

这是我目前的规格

[
  {
    "operation": "shift",
    "spec": {
      "meta": {
        "*": "&"
      },
      "data": {
        "name": "&",
        "details": {
          "values": {
            "*": {

              "*": "@(3,headers[&])"
            }
          }
        }
      }
    }
  }
]

有人有类似的情况吗?

共有2个答案

陶朝明
2023-03-14
[
  {
    "operation": "shift",
    "spec": {
      "data": {
        "details": {
          "values": {
            "*": {
              "*": {
                // @ takes value of each element and put it to a 
                // correspondent data2 element ([&2] - go up three levels to 
                // the first * and takes number of element)
                // @(4,headers[&0]) - go up 5 levels and take headers[&0] 
                // occurence (&0 - go up 1 level - second * and takes number 
                //of element)
                "@": "data2[&2].@(4,headers[&0])" 
              },
              // go up four levels and grab name value and put it into 
              // data2[&1].name
              "@(3,name)": "data2[&1].name",
              "@(4,meta)": { // go up five levels and grab meta value
                "*": "data2[&2].&" // for each value put it to data2[&2] as it is
              }
            }
          }
        }
      }
    }
  },
  {
    "operation": "shift",  // second shift operation to modify result of this above
    "spec": {
      "data2": ""  // removing data2 header
    }
  }
]
祁和通
2023-03-14

看起来我取得了进步,但仍然不够好:

当前规格:

[
  {
    "operation": "shift",
    "spec": {
      "meta": {
        "*": "&"
      },
      "data": {
        "name": "&",
        "details": {
          "values": {
            "*": {
              "*": "&.@(3,headers[&1])",
              "*": "&1"
            }
          }
        }
      }
    }
  }
]

输出是:

{
  "regId" : "us",
  "cId" : "SomeProduct",
  "weId" : 15,
  "name" : "R",
  "0" : [ 1539, 17, "Moskow" ],
  "1" : [ 1540, 18, "Berlin" ],
  "2" : [ 1541, 19, "Vienna" ]
    }

这应该是嵌套规范而不是嵌套规范吗?

 类似资料:
  • 我有一个关于使用jolt将平面json转换成嵌套json的问题。我对jolt很陌生,这是我的意见 我编写了jolt spec,但我没有得到想要的输出 我的预期产出是: 任何震动专家都可以帮助我获得所需的输出。我应该在颠簸中使用多个变换,还是可以在一个震动变压器中获得所需的输出?

  • 我有json,其中包括多个产品,每个产品有多个不同的细节。使用jolt,我只需要输入json中的几个字段,遵循与输入json几乎相同的结构。我成功地迭代了产品,但是当我试图迭代每个产品变体时,我没有得到想要的输出。 输入. json 这里是Spec.json 我想要的预期输出。 我现在得到的实际输出。

  • 如何使用jolt转换将平面JSON转换为嵌套JSON?我对JSON和jolt是新手。 输入: 预期输出: 编辑:我想在< code>SubFunds中添加一个新字段,但是新字段不在JSON文件中,它是计算字段,我可以按原样添加示例吗 并重命名字段:

  • 我有一个JSON如下所示: 为什么在输出中看不到Level1、Level2?请有人帮忙,我想看看在输出和输入太相似了。

  • 当调用外部API时,我收到了一个复杂的json结构,我需要根据我们的需要将其转换为简单的json。我发现jolt具有转换json的能力,但无法提出jolt规范。 我的输入Json数组—— 我的输出 Json 结构应该看起来像 - 我尝试了多种jolt规格,但无法得到想要的输出。这种情况下最理想的jolt规格应该是什么?

  • 我是JOLT转换的新手,我发现它在JSON转换中非常有用。但是当我遇到嵌套且复杂的JSON时,我感到困惑。 下面的JSON是一个嵌套且复杂的JsonArray,我需要将其转换为完全扁平的JsonArray。 JSON输入: 如您所见,我们有一个空的对象“字母类型”:[],但在其他Json对象中,“字母类型”有自己的对象并且不是空的。 下面的JSON是我的预期输出。 预期输出: 我需要的是一个JOL