2016-07-08 43 views
1

我是Talend的新人,并向更有经验的人寻求帮助。解析JSON到MongoDB inTalend

我想从Web服务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组件不允许您查看文件架构。例如,获得此JSON由TREST,它把这种格式:

{"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只承认“身体”的标签,而不能获得“CODIGO”标签,更不用说组件添加的双引号。

当我插入MongoDB中该内容(使用tMongoDBOutput),它创造了一个独特的记录,并且不会允许我CODIGO进行搜索,例如

我该怎么做才能有机会获得标签CODIGO和NOME_COMPLETO?

+0

您可能需要使用'.loads()从[json](https://docs.python.org/2.7/library/json.html)返回的数据将数据转换为实际的python对象,然后再将它们传递给inTalend –

+0

感谢您的快速回报。问题:我不使用python,而是使用java。无论如何,你在这个解决方案的工作中使用什么样的组件? –

回答

1

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

添加另一个tExtractJSONFields之后你用来提取Body标签。然后你可以提取字段CODIGONOME_COMPLETO。另外,JSON的路径循环查询"$.[*]"(我试过在上述网页)在tFileInputJSON也许还可以做你想做什么:

tFileInputJSON properties

+0

感谢JSONPath的提示! –

+1

您的建议帮助我获得了理想的解决方案。我在循环Jsonpath查询中输入“$ [*]”,并将Json查询定义为“$ .CODIGO”和“$ .NOME_COMPLETO”。我在tExtractJSONFields上直接对tMongoDBOutput使用了tRest。 –