我正在使用Microsoft REST API查询Azure应用程序,oauth和请求都没有问题。
InvokeHTTP的响应具有这种格式
{"@odata.context":"https://****.dynamics.com/api/data/v9.1/$metadata#endpoint","value":[ here comes the actual JSON result in format {
"@odata_etag" : "W/\"555598\"", "field":"value...},...]
,"@odata.nextLink":"https://****.dynamics.com/api/data/v9.1/endpoint?$skiptoken.....}
我需要提取nextLink用于分页和Value才能继续流程并存储结果。 当我尝试使用inferAvroSchema进行解析时,我可以开始使用它引发此错误“非法的初始字符:@ odata.etag”
我的想法是先推断avroSchema,然后再评估EsonateJsonPath以提取odata标签,然后提取值。
我尝试在结果中使用EvaluateJsonPath,要求为$。@ odata.context创建一个属性,但是它也找不到该项目,我确定与@有关。
我也可以将传入流的所有@替换为另一个字符,但是不知道这是否有意义。
我感觉我没有使用正确的方法,但是NIFI + odata无法在google或此处为我提供结果。 我愿意接受任何建议!
谢谢!
答案 0 :(得分:2)
模式字段不能包含@。您可以替换@,但是必须确保不要在电子邮件地址等实际内容中替换@。另一个解决方案是使用JoltTransformJSON处理器来转换API响应,以便您的流程可以使用它:
GenerateFlowFile:
对于JoltTransformJSON处理器,请提供以下Jolt规范:
[
{
"operation": "shift",
"spec": {
"\\@odata.nextLink": "next"
}
}
]
保留其他属性的默认值。您可以在此处与Jolt一起玩耍:http://jolt-demo.appspot.com/
EvaluateJsonPath:
结果:
请注意,URL现在已成为流文件属性的一部分。
答案 1 :(得分:1)
您的预感是正确的,您只能对正在使用的架构类型(avro或JSON)中的字段名称使用有效字符。 您可以使用replacetext处理器使NiFi移除非法字符,请在此处阅读有效内容:http://avro.apache.org/docs/current/spec.html#names