如何使用 QueryRecord 从 JSON 对象中提取字段
How to extract the field from JSON object with QueryRecord
这个问题困扰我很久了。我需要通过从输入 JSON 字段 refs[=31= 获取数组(字段 ref)来使用 QueryRecord 创建一个新的 JSON 流文件] 和 跳过 对象字段,如下例所示:
输入JSON流文件
{
"name": "name1",
"desc": "full1",
"refs": {
"ref": [
{
"source": "source1",
"url": "url1"
},
{
"source": "source2",
"url": "url2"
}
]
}
}
查询记录配置
JSONTreeReader 设置为 Infer Schema 和 JSONRecordSetWriter
select name, description, (array[rpath(refs, '//ref[*]')]) as sources from flowfile
输出JSON(需要)
{
"name": "name1",
"desc": "full1",
"references": [
{
"source": "source1",
"url": "url1"
},
{
"source": "source2",
"url": "url2"
}
]
}
但出现错误:
QueryRecord Failed to write MapRecord[{references=[Ljava.lang.Object;@27fd935f, description=full1, name=name1}] with schema ["name" : "STRING", "description" : "STRING", "references" : "ARRAY[STRING]"] as a JSON Object due to java.lang.ClassCastException: null
尝试以下方法,在您的情况下它应该有效:
1) 完整阅读你的 JSON 字段(我用你的例子用 GenerateFlowFile 处理器模仿了它)
2) 添加 EvaluateJsonPath 处理器,它将 2 header 字段 (name, desc) 放入属性中:
3) 添加 SplitJson 处理器,它将把你的 JSON 按 refs/ref/ 组拆分(按“$.refs.ref”拆分):
4) 添加 ReplaceText 处理器,它会将 header 字段(名称、描述)添加到拆分行(将“[{]”值替换为“{"name":”${json.name}","desc":"${json.desc}","):
5) 完成:
希望对您有所帮助。
解决方案!:使用JoltTransformJSON通过Jolt规范转换JSON。 About this 规范。
这个问题困扰我很久了。我需要通过从输入 JSON 字段 refs[=31= 获取数组(字段 ref)来使用 QueryRecord 创建一个新的 JSON 流文件] 和 跳过 对象字段,如下例所示:
输入JSON流文件
{
"name": "name1",
"desc": "full1",
"refs": {
"ref": [
{
"source": "source1",
"url": "url1"
},
{
"source": "source2",
"url": "url2"
}
]
}
}
查询记录配置
JSONTreeReader 设置为 Infer Schema 和 JSONRecordSetWriter
select name, description, (array[rpath(refs, '//ref[*]')]) as sources from flowfile
输出JSON(需要)
{
"name": "name1",
"desc": "full1",
"references": [
{
"source": "source1",
"url": "url1"
},
{
"source": "source2",
"url": "url2"
}
]
}
但出现错误:
QueryRecord Failed to write MapRecord[{references=[Ljava.lang.Object;@27fd935f, description=full1, name=name1}] with schema ["name" : "STRING", "description" : "STRING", "references" : "ARRAY[STRING]"] as a JSON Object due to java.lang.ClassCastException: null
尝试以下方法,在您的情况下它应该有效:
1) 完整阅读你的 JSON 字段(我用你的例子用 GenerateFlowFile 处理器模仿了它)
2) 添加 EvaluateJsonPath 处理器,它将 2 header 字段 (name, desc) 放入属性中:
3) 添加 SplitJson 处理器,它将把你的 JSON 按 refs/ref/ 组拆分(按“$.refs.ref”拆分):
4) 添加 ReplaceText 处理器,它会将 header 字段(名称、描述)添加到拆分行(将“[{]”值替换为“{"name":”${json.name}","desc":"${json.desc}","):
5) 完成:
希望对您有所帮助。
解决方案!:使用JoltTransformJSON通过Jolt规范转换JSON。 About this 规范。