在 Talend 中将 JSON 解析为 MongoDB

parse JSON to MongoDB inTalend

我是 Talend 的新手,向更有经验的人寻求帮助。

我正在尝试从网络服务 RESTFul 下载数据到 MongoDB 数据库,但收到的原始 JSON 格式不允许直接插入到需要的表中,我需要先转换这个 JSON 才能进入一个集合,这样通过 MongoDB 我可以通过 CODE 和 NAME 键进行搜索。

我访问了一些关于这个主题的帖子 (JSON parser for Talend, tRest and map JSON with tExtractJSONField with TALEND, How to Parse Json in Talend using tExtractJsonField),但我无法让它发挥作用。我尝试使用 tFileInputJSON、tMap、tExtractJSONFields,但没有成功。

我需要的 JSON 之一,我得到的格式如下:

[
{"CODIGO":"907","NOME_COMPLETO":"Ag\u00eancia do IBGE em Ceres"},
{"CODIGO":"905","NOME_COMPLETO":"Ag\u00eancia do IBGE em Goi\u00e1s"},
{"CODIGO":"910","NOME_COMPLETO":"Ag\u00eancia do IBGE em Ipor\u00e1"},
{"CODIGO":"919","NOME_COMPLETO":"Ag\u00eancia do IBGE em Itumbiara"},
{"CODIGO":"911","NOME_COMPLETO":"Ag\u00eancia do IBGE em Jaragu\u00e1"},
]

我不知道是否因为文件开头和结尾处存在“[”和“]”,Talend 组件不允许您查看文件架构。比如tRest得到这个JSON,它转化成这样的格式:

{"data":[
    {"Body":"[
        {\"CODIGO\":\"907\",\"NOME_COMPLETO\":\"Ag\u00eancia do IBGE em Ceres\"},
        {\"CODIGO\":\"905\",\"NOME_COMPLETO\":\"Ag\u00eancia do IBGE em Goi\u00e1s\"},
        {\"CODIGO\":\"910\",\"NOME_COMPLETO\":\"Ag\u00eancia do IBGE em Ipor\u00e1\"},
        {\"CODIGO\":\"919\",\"NOME_COMPLETO\":\"Ag\u00eancia do IBGE em Itumbiara\"},
        {\"CODIGO\":\"911\",\"NOME_COMPLETO\":\"Ag\u00eancia do IBGE em Jaragu\u00e1\"}
    ]",
"ERROR_CODE":null
}
]

}

因此,tExtractJSONFields只能识别"Body"标签,无法访问"CODIGO"标签,更不用说组件添加的双引号了。

当我在MongoDB中插入这个内容时(使用tMongoDB输出),它创建了一个唯一的记录,并且不允许我通过CODIGO搜索,例如

我需要做什么才能访问标签 CODIGO 和 NOME_COMPLETO?

首先,让我推荐 http://jsonpath.com,我经常用它来检查我的 JSON 路径查询的正确性。

在用于提取 Body 标记的那个之后添加另一个 tExtractJSONFields。然后您可以提取字段 CODIGONOME_COMPLETO。或者,JSON 路径循环查询 "$.[*]"(我在所述网页上尝试过)在 tFileInputJSON 中也可能能够执行以下操作你想要: