我有一个来自InvokeHTTP的json。我做了一个Split Json和JoltTransform来获取Key,Values,但是我需要将所有Key从Camelcase更改为snakecase。
每次调用InvokeHttp时,我的密钥都会有所不同。我已经尝试过AttributestoJson和EvaluateJsonPath以及一些替换文本的方法,但是还没有找到一种方法来动态地更改键,然后合并回值而无需编写自定义处理器。
来自InvokeHTTP的原始数据:
{
"data": {
"Table": [
{
"Age": 51,
"FirstName": "Bob",
"LastName": "Doe"
},
{
"Age": 26,
"FirstName": "Ryan",
"LastName": "Doe"
}
]
}
}
在Split Json(在单独的流文件中为我提供每个json)和Jolt之后输入:
[
{
"Key": "Age",
"Value": 51
},
{
"Key": "FirstName",
"Value": "Bob"
},
{
"Key": "LastName",
"Value": "Doe"
}
]
所需的输出:
{
"data": {
"Table": [
{
"age": 51,
"first_name": "Bob",
"last_name": "Doe"
},
{
"age": 26,
"first_name": "Ryan",
"last_name": "Doe"
}
]
}
}
答案 0 :(得分:1)
我写了https://www.pro-football-reference.com/years/2005/,它使用ReplaceText
用.
替换了JSON密钥中的_
。此处可以应用相同的逻辑(链接中提供模板)。正如我在该答案中指出的那样,一种更干净的解决方案是使用ExecuteScript
,尤其是在大多数脚本语言中,从驼峰到蛇形的转换很容易完成。
答案 1 :(得分:1)
如果您知道这些字段,则可以在原始输入JSON上使用JoltTransformJSON,因此不必使用SplitJson,这是一个规范,可以进行(显式)字段名转换:
[
{
"operation": "shift",
"spec": {
"data": {
"Table": {
"*": {
"Age": "data.Table[#2].age",
"FirstName": "data.Table[#2].first_name",
"LastName": "data.Table[#2].last_name"
}
}
}
}
}
]
您还可以使用UpdateRecord,只需要为JsonTreeReader和JsonRecordSetWriter使用单独的架构即可。