仅当通过 Jolt 输入时连接 Json 值

问题描述 投票:0回答:1

我输入了以下 Json:

{
    "extraFields": {
        "language": "french", 
        "status": {
            "comment": "hey"
        }
    }
}

使用 Jolt,我想实现以下输出:

{
    "extraFields": "{\"language\": \"french\", \"status\": {\"comment\": \"hey\"}}"
}

注意反斜杠。

我成功地使用以下 Jolt 公式做到了这一点:

[
  {
    "operation": "modify-overwrite-beta",
    "spec": {
      "extraFields": "=concat('{', '\"language\": ', '\"', @(0,language), '\" ,', '\"status\": ', '{', '\"comment\": ', '\"', @(1,extraFields.status.comment), '\"', '}', '}')"
    }
  }
]

问题是,

extraFields
的字段是可选含义,有些字段可能不会输入。 例如,可以省略
status
language
或两者都省略。 结果是,未输入的键为空值。

是否可以仅连接输入的键?

json key transformation specifications jolt
1个回答
0
投票

您可以使用 shift 填充相关字符,然后通过使用 toString

 函数(例如 
)通过 modify

转换对属性进行字符串化
[
  {
    "operation": "shift",
    "spec": {
      "*": {
        "language": {
          "*": "&2.\"&1\".\"&\""
        },
        "status": {
          "*": {
            "*": "&3.\"&2\".\"&1\".\"&\""
          }
        }
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "*": {
        "*language*": {
          "*": {
            "$": "&3.&2"
          }
        },
        "*status*": {
          "*": {
            "*": {
              "$": "&4.&3.&2"
            }
          }
        }
      }
    }
  },
  {
    "operation": "modify-overwrite-beta",
    "spec": {
      "*": "=toString"
    }
  },
  {
    "operation": "modify-overwrite-beta",
    "spec": {
      "temp1": "=toString(@(1,extraFields))",
      "temp2": "=split('=',@(1,temp1))",
      "extraFields": "=join(':',@(1,temp2))"
    }
  },
  {
    "operation": "remove",
    "spec": {
      "temp*": ""
    }
  }
]
© www.soinside.com 2019 - 2024. All rights reserved.