【问题标题】:JSON Deserialization on TalendTalend 上的 JSON 反序列化
【发布时间】:2017-10-23 08:08:48
【问题描述】:

试图弄清楚如何在 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 字段:

【问题讨论】:

  • 到目前为止您尝试过什么?请edit您的问题并添加有关 tExtractJJSONFields 组件的信息。
  • 我确实忘记了,编辑了@tobi6。实际上我已经尝试过 tMap 组件(也是 XML 组件),但它不起作用。

标签: json talend


【解决方案1】:

在 XPath 中使用 tExtractJSONFields 时,您需要

1) 一个有效的 XPath 循环点

2) 与循环路径相关的结构的有效 XPath 映射

此外,在将 XPath 与 Talend 结合使用时,每个 值都需要一个键。如果您想循环访问它,则该密钥无法更改。这意味着这是无效的:

      {
      "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 已经有一段时间了。

【讨论】:

  • 我在这张图片中使用了 XPath,但我也可以使用 JSON 路径,我真的不知道 2 之间的区别,因为我是框架的初学者。另外,正如我之前所说,我无法更改 JSON 格式,因为它是从外部 API 检索的。在这种情况下,有没有办法绕过或者使用 JSONPath ?
【解决方案2】:

我一直在摄取一些复杂的 json 结构,并通过最小的 json 库和 talend 中的 tjava 组件来做到这一点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多