我想使用jolt将一个输入json转换为所需格式

问题描述

我的输入json

{
  "properties": [
    {
      "uniqueId": "100","type": "boolean","required": true,"deFinition": false,"description": "is bundled or not","password": false,"name": "isBundled","value": "true","defaultValue": true,"hidden": false,"immutable": false,"isDeclaredListInput": false,"getInputProperty": false,"empty": false,"country": "asdsa"
    }
  ]
}

根据是否存在defaultValue,我们需要在serviceSpecCharacteristicValueValue内部有一个字段– isDefault –如果值存在则为true,否则为false

这是我的规格

[
  {
    "operation": "shift","spec": {
      "properties": {
        "*": {
          "name": "serviceSpecCharacteristic[&1].name","description": "serviceSpecCharacteristic[&1].description","type": "serviceSpecCharacteristic[&1].valueType","required": "serviceSpecCharacteristic[&1].required","defaultValue":"serviceSpecCharacteristic[&1].serviceSpecCharacteristicValue[].value"
        }
      }
    }
  }
]

当前输出

{
  "serviceSpecCharacteristic" : [ {
    "name" : "isBundled","description" : "is bundled or not","valueType" : "boolean","required" : true,"serviceSpecCharacteristicValue" : [ {
      "value" : "true"
    } ]
  } ]
}

预期的输出:-根据是否存在defaultValue,我们需要在serviceSpecCharacteristicValueValue内部有一个字段– isDefault –如果值存在,则为true

{
  "serviceSpecCharacteristic" : [ {
    "name" : "isBundled","serviceSpecCharacteristicValue" : [ {
      "value" : "true","isdefault":true

    } ]
  } ]
}

解决方法

如果原始JSON中不存在,则将defaultValue添加为false。然后使用移位操作。

[
  {
    "operation": "modify-default-beta","spec": {
      "properties": {
        "*": {
          //set defaultValue to false if it does not exists.
          "defaultValue": "false"
        }
      }
    }
  },{
    "operation": "shift","spec": {
      "properties": {
        "*": {
          "name": "serviceSpecCharacteristic[&1].name","description": "serviceSpecCharacteristic[&1].description","type": "serviceSpecCharacteristic[&1].valueType","required": "serviceSpecCharacteristic[&1].required","value": "serviceSpecCharacteristic[&1].serviceSpecCharacteristicValue[&1].value","defaultValue": "serviceSpecCharacteristic[&1].serviceSpecCharacteristicValue[&1].isdefault"
        }
      }
    }
  }
]

编辑1:

检查defaultValue是否为假,然后将isdefault设置为false,否则将isdefault设置为true。

[
  {
    "operation": "modify-default-beta","defaultValue": {
            "false": {
              "#false": "serviceSpecCharacteristic[&3].isdefault"
            },"*": { "#true": "serviceSpecCharacteristic[&3].serviceSpecCharacteristicValue[&3].isdefault" }
          }
        }
      }
    }
  }
]