json - EvaluateJsonPath 无法返回标量
问题描述
我正在尝试从 JSON 中提取一个值到flowfile-attribute。当我运行 EvaluateJsonPath 处理器时,我收到一条错误消息
"Unable to get a scalar value for expression $..fields.storyBoard.stringValue
.
输入 JSON 如下所示:
{
"name" : "projects/fakedims-0000/databases/(default)/documents/device/0000",
"fields" : {
"reportKey" : {
"stringValue" : "abc123"
},
"dateOccured" : {
"timestampValue" : "2018-10-14T04:00:00Z"
},
"storyBoard" : {
"stringValue" : "https://path/to/media"
},
"new" : {
"integerValue" : "25"
},
"name" : {
"stringValue" : "device one"
},
"location" : {
"geoPointValue" : {
"latitude" : -78.413751,
"longitude" : 38.156487
}
}
},
"createTime" : "2018-10-19T00:02:26.209335Z",
"updateTime" : "2018-10-19T22:22:24.382136Z"
}
JSONPath 表达式是$..fields.storyBoard.stringValue
我认为正在发生的是处理器正在返回["https://path/to/media"]
而不仅仅是字符串。
如果对流文件内容而不是属性进行评估,这就是我得到的。为什么?我能做些什么来修复它?
解决方案
如果要提取为流文件属性,请将处理器中的返回类型属性值更改为jsonEvaluateJsonPath
返回类型属性说明:
指示 JSON 路径表达式的所需返回类型。选择“ auto-detect ”会将返回类型设置为“ json ”,用于“ flowfile-content ”的目的地,将“ scalar ”设置为“ flowfile-attribute ”的目的地。
当您尝试提取嵌套键而不是根级别的键时(例如:名称,createTime ..),这就是我们需要将返回类型配置为Json而不是标量的原因。
此外,您可以使用FlattenJson处理器(分隔符'_')来展平所有嵌套的 json,然后Return Type as auto detect
在EvaluateJsonPath处理器中使用。
推荐阅读
- swift - 使用泛型将额外的道具注入视图模型
- scala - 如何按三级 Seq 数据分组
- karate - 空手道司机 iframe 元素识别挑战
- python - 无法在 Python 3 中打印列表(范围(4**4**4))
- android - xamarin android错误APT0000:资源''与配置''的重复值
- javascript - indexOf 问题。这段代码是如何工作的?
- git - Git:终端上的“[master $=]”是什么意思?
- android - 如何使用 Fragment 中的 ViewModelProvider 将 ViewModel 附加到活动?
- java - 如何在弹性搜索中创建索引和类型 - 我已经尝试了到目前为止提供的答案,但它们不起作用
- angular - 在 Angular 中使用 ngx-translate 翻译 datatable.net