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 组件来实现。