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

如何为嵌套数组编写JOLT规范

屠建本
2023-03-14

我正在尝试使用JOLT转换JSON。这个JSON由嵌套数组组成,我不能正确地转换它。有人能帮忙吗?谢了。

{
  "root": [
    {
      "id": "1234",
      "password": "key1234",
      "devices": [
        {
          "details": {
            "deviceType": "tv-iot",
            "deviceId": "tv-iot-111"
          }
        },
        {
          "details": {
            "deviceType": "machine-iot",
            "deviceId": "machine-iot-999"
          }
        }
      ]
    },
    {
      "id": "6789",
      "password": "key6789",
      "devices": [
        {
          "details": {
            "deviceType": "phone-iot",
            "deviceId": "phone-iot-111"
          }
        },
        {
          "details": {
            "deviceType": "mobile-iot",
            "deviceId": "mobile-iot-999"
          }
        }
      ]
    }
  ]
}

这是我写的规范。

[
  {
    "operation": "shift",
    "spec": {
      "root": {
        "*": {
          "id": "[&1].userid",
          "password": "[&1].pwd",
          "devices": {
            "*": {
              "details": {
                "deviceType": "[&2].deviceCategory",
                "deviceId": "[&2].deviceUniqueValue"
              }
            }
          }
        }
      }
    }
  }
]

我期待的JSON是:

[
  {
    "userid": "1234",
    "pwd": "key1234",
    "devices": [
      {
        "details": {
          "deviceCategory": "tv-iot",
          "deviceUniqueValue": "tv-iot-111"
        }
      },
      {
        "details": {
          "deviceCategory": "machine-iot",
          "deviceUniqueValue": "machine-iot-999"
        }
      }
    ]
  },
  {
    "userid": "6789",
    "pwd": "key6789",
    "devices": [
      {
        "details": {
          "deviceCategory": "phone-iot",
          "deviceUniqueValue": "phone-iot-111"
        }
      },
      {
        "details": {
          "deviceCategory": "mobile-iot",
          "deviceUniqueValue": "mobile-iot-999"
        }
      }
    ]
  }
]

然而,我得到了错误的输出。不知怎的,我的嵌套对象正在转换为列表。

[ 
 {
   "userid" : "1234",
   "pwd" : "key1234",
   "deviceCategory" : [ "tv-iot", "phone-iot" ],
   "deviceUniqueValue" : [ "tv-iot-111", "phone-iot-111" ]
 }, 
 {
   "deviceCategory" : [ "machine-iot", "mobile-iot" ],
   "deviceUniqueValue" : [ "machine-iot-999", "mobile-iot-999" ],
   "userid" : "6789",
   "pwd" : "key6789"
 } 
]

我不知道出了什么问题。有人能帮忙吗?

共有1个答案

常波
2023-03-14

您可以从深入研究最内部的对象开始,同时通过移位变换按id值划分子对象,例如

[
  {
    "operation": "shift",
    "spec": {
      "root": {
        "*": {
          "devices": {
            "*": {
              "details": {
                "*": {
                  "@(4,id)": "@(5,id).userid",
                  "@(4,password)": "@(5,id).pwd",
                  "@": "@(5,id).devicedetails[&3].&2.&1"
                }
              }
            }
          }
        }
      }
    }
  },
  {
    // get rid of top level object names
    "operation": "shift",
    "spec": {
      "*": ""
    }
  },
  {
    // get rid of repeating components of each arrays respectively
    "operation": "cardinality",
    "spec": {
      "*": {
        "us*": "ONE",
        "pwd": "ONE"
      }
    }
  },
  {
    // determine new key names for attributes respectively
    "operation": "modify-overwrite-beta",
    "spec": {
      "*": {
        "*": {
          "*": {
            "*": {
              "deviceCategory": "=(@(1,deviceType))",
              "deviceUniqueValue": "=(@(1,deviceId))"
            }
          }
        }
      }
    }
  },
  {
    // get rid of extra elements generated
    "operation": "remove",
    "spec": {
      "*": {
        "*": {
          "*": {
            "*": {
              "deviceType": "",
              "deviceId": ""
            }
          }
        }
      }
    }
  }
]
 类似资料:
  • 我正在尝试使用 JOLT 转换 JSON。此 JSON 由嵌套数组组成,我无法获得正确的转换。 这是原始的JSON。请注意,总会有一个带有单个对象的“结果”数组。此对象将始终包含一个“行”数组。我想要行数组中每个元素的字段。 这是我写的规范: 预期的 JSON 是: 然而,我的规范返回以下输出: 水平可能有问题。但是我想不出来。有人能帮忙吗?

  • 我正在尝试编写一个规范来使用jolt转换进行以下转换。我只对更改json中键的名称感兴趣,值应该保持不变。帮帮我。 输入Json: 预期输出:

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

  • 我正在努力实现以下转变。然而,我的解决方案在最终数组中添加了不需要的空值。 转换需要为所有元素在array中移位名称。我创建了3个案例来说明这个问题。 编辑:< code >根数组将始终至少有1个元素。 当前的JOLT规范工作正常,除了是空数组的情况。它生成值,我试图指定一个空字符串(或任何硬编码的字符串值,如)

  • 我试图根据第二个嵌套数组中的值的数量将嵌套数组转换为对象。我似乎无法获取值字段的数量并将其用作规范中的键。现在这是我的输入JSON文件: 这是我想要的JSON输出: 这是我目前的规格 有人有类似的情况吗?

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