JSON Talend 反序列化
JSON Deserialization on Talend
试图弄清楚如何在 talend 组件中反序列化这种 json :
{
"ryan@toofr.com": {
"confidence":119,"email":"ryan@toofr.com","default":20
},
"rbuckley@toofr.com": {
"confidence":20,"email":"rbuckley@toofr.com","default":15
},
"ryan.buckley@toofr.com": {
"confidence":18,"email":"ryan.buckley@toofr.com","default":16
},
"ryanbuckley@toofr.com": {
"confidence":17,"email":"ryanbuckley@toofr.com","default":17
},
"ryan_buckley@toofr.com": {
"confidence":16,"email":"ryan_buckley@toofr.com","default":18
},
"ryan-buckley@toofr.com": {
"confidence":15,"email":"ryan-buckley@toofr.com","default":19
},
"ryanb@toofr.com": {
"confidence":14,"email":"ryanb@toofr.com","default":14
},
"buckley@toofr.com": {
"confidence":13,"email":"buckley@toofr.com","default":13
}
}
此 JSON 来自 Toofr API,可在其中找到文档 here .
这里是实际位置:
对于在数据库中检索到的每一行,我调用 API 并得到这个(名字、姓氏和公司每次都在变化。
有谁知道如何修改 tExtractJSONField(或使用其他东西)以在 tLogRow 中显示结果(针对数据库中的每一行)?
提前致谢!
编辑 1:
这是我的 tExtractJSON 字段:
当使用带 XPath 的 tExtractJSONFields 时,您需要
1) 有效的 XPath 循环点
2) 有效的 XPath 映射到您相对于循环路径的结构
此外,在 Talend 中使用 XPath 时,每个 值都需要一个键。如果您想遍历它,则该键不能更改。这意味着这是无效的:
{
"ryan@toofr.com": {
"confidence":119,"email":"ryan@toofr.com","default":20
},
"rbuckley@toofr.com": {
"confidence":20,"email":"rbuckley@toofr.com","default":15
},
但是这个结构是有效的:
{
"contact": {
"confidence":119,"email":"ryan@toofr.com","default":20
},
"contact": {
"confidence":20,"email":"rbuckley@toofr.com","default":15
},
因此,使用正确的数据,循环点可能是 /contact
。
那么 Confidence 的映射将是 confidence
(来自 JSON 的名称),Email
的映射将是 email
,反之亦然 default
.
编辑
JSONPath 有一些缺点,其中之一是您不能在层次结构中更上一层楼。您可以尝试使用 jsonpath.com
找出正确的查询
循环表达式可以是$.*
。不过,我不确定这是否会满足您的需求 - 由于缺点,我已经有一段时间没有在 Talend 中使用 JSONPath 了。
我一直在摄取一些复杂的 json 结构,并通过最小的 json 库和 talend 中的 tjava 组件来实现。
试图弄清楚如何在 talend 组件中反序列化这种 json :
{
"ryan@toofr.com": {
"confidence":119,"email":"ryan@toofr.com","default":20
},
"rbuckley@toofr.com": {
"confidence":20,"email":"rbuckley@toofr.com","default":15
},
"ryan.buckley@toofr.com": {
"confidence":18,"email":"ryan.buckley@toofr.com","default":16
},
"ryanbuckley@toofr.com": {
"confidence":17,"email":"ryanbuckley@toofr.com","default":17
},
"ryan_buckley@toofr.com": {
"confidence":16,"email":"ryan_buckley@toofr.com","default":18
},
"ryan-buckley@toofr.com": {
"confidence":15,"email":"ryan-buckley@toofr.com","default":19
},
"ryanb@toofr.com": {
"confidence":14,"email":"ryanb@toofr.com","default":14
},
"buckley@toofr.com": {
"confidence":13,"email":"buckley@toofr.com","default":13
}
}
此 JSON 来自 Toofr API,可在其中找到文档 here .
这里是实际位置:
对于在数据库中检索到的每一行,我调用 API 并得到这个(名字、姓氏和公司每次都在变化。
有谁知道如何修改 tExtractJSONField(或使用其他东西)以在 tLogRow 中显示结果(针对数据库中的每一行)?
提前致谢!
编辑 1:
这是我的 tExtractJSON 字段:
当使用带 XPath 的 tExtractJSONFields 时,您需要
1) 有效的 XPath 循环点
2) 有效的 XPath 映射到您相对于循环路径的结构
此外,在 Talend 中使用 XPath 时,每个 值都需要一个键。如果您想遍历它,则该键不能更改。这意味着这是无效的:
{
"ryan@toofr.com": {
"confidence":119,"email":"ryan@toofr.com","default":20
},
"rbuckley@toofr.com": {
"confidence":20,"email":"rbuckley@toofr.com","default":15
},
但是这个结构是有效的:
{
"contact": {
"confidence":119,"email":"ryan@toofr.com","default":20
},
"contact": {
"confidence":20,"email":"rbuckley@toofr.com","default":15
},
因此,使用正确的数据,循环点可能是 /contact
。
那么 Confidence 的映射将是 confidence
(来自 JSON 的名称),Email
的映射将是 email
,反之亦然 default
.
编辑
JSONPath 有一些缺点,其中之一是您不能在层次结构中更上一层楼。您可以尝试使用 jsonpath.com
找出正确的查询循环表达式可以是$.*
。不过,我不确定这是否会满足您的需求 - 由于缺点,我已经有一段时间没有在 Talend 中使用 JSONPath 了。
我一直在摄取一些复杂的 json 结构,并通过最小的 json 库和 talend 中的 tjava 组件来实现。