【问题标题】:Unable to transform stringfy json array of objects to json object using jolt transformer无法使用 jolt 转换器将字符串化 json 对象数组转换为 json 对象
【发布时间】:2021-09-24 12:11:43
【问题描述】:

输入json

"sales" : "[{\"Option\":\"Britania\",\"value\":\"200\"}{\"Option\":\"Parle\",\"value\":\"100\"}{\"Option\":\"mariegold\",\"value\":\"500\"}{\"Option\":\"snacks\",\"value\":\"200\"}]",

使用震动变压器

[
  {
    "operation": "modify-overwrite-beta",
    "spec": {
      "CREATIONDATETIME": "=substring(@(1,CREATIONDATETIME),0,19)"
    }
  },
  {
    "operation": "shift",
    "spec": {
      "sales": "extendedAttributes.salesValueOptions",
      "status": {
        "SUBMITTED": {
          "#submitted": "key6"
        }
      }
    }
  },
  {
    "operation": "modify-default-beta",
    "spec": {
      "key6": "pending"
    }
  }
]

需要输出

{
  "sales": {
    "option1": "Britannia",
    "value1": "0",
    "option2": "cadbury",
    "value2": "0",
    "option3": "Parle",
    "value3": "0"
  }
}

我已经尝试了 JOLT github 帮助页面上提供的不同 JsonSpec。但我无法解决这个问题。任何帮助或指点将不胜感激。

【问题讨论】:

  • 是否可以在输出中获取具有从零后缀的键?像 "option0" : "Britannia", value0": "0","option1": "cadbury", "value1": "0", .. 等等......
  • 但是当前的不是一个有效的 JSON....
  • 那么,您是如何在 site 上测试您的输入的?按下 JSON Validate 按钮时没有收到红色警报吗...?
  • 是的,最新更新的输入json无效
  • 请澄清您的具体问题或提供其他详细信息以准确突出您的需求。正如目前所写的那样,很难准确地说出你在问什么。

标签: json jolt transformer


【解决方案1】:

颠簸规格:

[
//First remove the NoneOfTheAbove Element from the array
  {
    "operation": "shift",
    "spec": {
      "sales": {
        "*": {
          "Option": {
            "None of the above": null,
            "*": {
              "@2": "filteredOutput"
            }
          }
        }
      }
    }
  },
  // then map the output accordingly
  {
    "operation": "shift",
    "spec": {
      "filteredOutput": {
        "*": {
          "Option": "sales.option&1",
          "value": "sales.value&1"
        }
      }
    }
  }


]

输出:

{
  "sales" : {
    "option0" : "Britannia",
    "value0" : "0",
    "option1" : "Cadbury",
    "value1" : "0",
    "option2" : "Parle",
    "value2" : "0"
  }
}

如果有任何问题,请尝试告诉我。

【讨论】:

  • 在这里尝试使用它们 jolt-demo.appspot.com/#inception 得到的答案为空
【解决方案2】:
  • 如果索引默认从零开始,则不需要 用 Option = 'None of the above' 消除这种情况,然后只 一步规范就足够了,例如
[
  {
    "operation": "shift",
    "spec": {
      "*": {
        "*": {
          "*": "&2.&&1"
        }
      }
    }
  }
]

输出

{
  "sales" : {
    "Option0" : "Britannia",
    "value0" : "0",
    "Option1" : "Cadbury",
    "value1" : "0",
    "Option2" : "Parle",
    "value2" : "0",
    "Option3" : "None of the above",
    "value3" : "0"
  }
}
  • 如果你想摆脱这种情况 Option = 'None of the 以上',然后应用以下规范
[
  {
    "operation": "shift",
    "spec": {
      "*": {
        "*": {
          "Option": {
            "None of the above": "",
            "*": {
              "@2": "&4.&3"
            }
          }
        }
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "*": {
        "*": {
          "*": "&1"
        }
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "*": {
        "*": {
          "*": "&2.&1.&"
        }
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "*": {
        "*": {
          "*": "&2.&&1"
        }
      }
    }
  }
]

输出

{
  "sales" : {
    "Option0" : "Britannia",
    "value0" : "0",
    "Option1" : "Cadbury",
    "value1" : "0",
    "Option2" : "Parle",
    "value2" : "0"
  }
}
  • 对于您当前的情况,您可以使用以下多个步骤
[
  {
    "operation": "shift",
    "spec": {
      "*": {
        "*": {
          "Option": {
            "None of the above": "",
            "*": {
              "@2": "&4.&3"
            }
          }
        }
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "*": {
        "*": {
          "*": "&1"
        }
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "*": {
        "*": {
          "*": "&2.&1.&",
          "$": "&2.&1.idx"
        }
      }
    }
  },
  {
    "operation": "modify-overwrite-beta",
    "spec": {
      "*": {
        "*": {
          "idx": "=intSum(1,@(1,idx))"
        }
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "*": {
        "*": {
          "*": "&2.@(1,idx).&"
        }
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "*": {
        "*": {
          "*": "&2.&&1"
        }
      }
    }
  },
  {
    "operation": "remove",
    "spec": {
      "*": {
        "idx*": ""
      }
    }
  }
]

输出

{
  "sales" : {
    "Option1" : "Britannia",
    "value1" : "0",
    "Option2" : "Cadbury",
    "value2" : "0",
    "Option3" : "Parle",
    "value3" : "0"
  }
}

前两步用于摆脱 Option = 'None of the above' 的情况。 modify-overwrite-beta 规范是生成递增索引(“idx”)。这些索引作为后缀粘贴在键名上,然后在最后一个规范中删除

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-19
  • 1970-01-01
  • 1970-01-01
  • 2013-08-02
  • 1970-01-01
  • 2021-08-25
相关资源
最近更新 更多