我想通过NiFi将JSON转换为Avro。不幸的是,JSON的复杂类型是我希望看作简单字符串的值!
JSON:
"FLAGS" : {"FLAG" : ["STORED","ACTIVE"]}
我怎样才能告诉AVRO简单地存储" {" FLAG" :[" STORED"," ACTIVE"]}"或" [1,2,3," X"]"作为一个字符串?
真诚地感谢你!
答案 0 :(得分:3)
在NiFi的ConvertJSONToAvro处理器中执行的JSON到Avro转换并没有在同一步骤中进行转换。基于Avro架构进行转换的能力非常有限,大多数情况下省略了输出中的输入数据字段。但它不会将复杂的结构强制转换为字符串。
相反,您应首先进行JSON-to-JSON转换,然后将汇总的JSON转换为Avro。我认为你要找的是这样的结构:
{
"FLAGS": "{\"FLAG\":[\"STORED\",\"ACTIVE\"]}"
}
NiFi的JoltTransformJSON,ExecuteScript处理器非常适合这种情况。如果您的记录足够简单,甚至可能是EvaluateJsonPath $.FLAGS
和ReplaceText { "FLAGS": "${flags:escapeJson()}" }
的组合。