使用Talend Open Studio将JSON写入字段

Elo*_*fin 6 json talend

我尝试将旧数据库中的数据迁移到我们的新应用程序中.

在进程中,我需要从旧数据库中获取数据以创建必须存储在新MySQL数据库中的字段中的JSON.

所以我使用组件tWriteJSONFieldtExtractJSONFields.

tWriteJSONField,我的XML树看起来像这样:

path
|-- id [loop element]
|-- name
|-- description
Run Code Online (Sandbox Code Playgroud)

注意:我找不到如何使用loop elementgroup element属性.我不明白它是如何工作的,文档没有谈到这一点.

该组件tWriteJSONField链接到a tExtractJSONFields以便id从JSON中提取.我需要知道每个记录JSON必须链接.

tExtractJSONFields配置:XPath请求

"/path"
Run Code Online (Sandbox Code Playgroud)

tExtractJSONFields配置:映射

-----------------------------------------------
| column        | XPath request | get nodes ? |
-----------------------------------------------
| idForm        | "id"          | false       |
-----------------------------------------------
| jsonStructure | "*"           | yes         |
-----------------------------------------------
Run Code Online (Sandbox Code Playgroud)

我的问题是jsonStructure输出tExtractJSONField,我只得到我的root标签的第一个孩子.在我的情况下jsonStructure看起来像这样:

{
   "id": "123"
}
Run Code Online (Sandbox Code Playgroud)

预期结果是:

{
   "id": "123",
   "name": "Test",
   "description": "Test"
}
Run Code Online (Sandbox Code Playgroud)

如果我name之前宣布这个孩子id,我会得到:

{
   "name": "Test"
}
Run Code Online (Sandbox Code Playgroud)

我试图更改XPath查询,jsonStructure但我从来没有得到所有字段.

为什么?

这是我关于Talend的第一个问题,所以如果它缺少信息,请在评论中告诉我.

感谢帮助.

编辑:

从数据tMysqlInputtWriteJSONField:

注意:我的通量包含更多列,但我只显示用于创建JSON的列.

---------------------------------------------------------------------------------------
| IdForm | NomForm                    | DescrForm                                     |
---------------------------------------------------------------------------------------
| 1      | English training           | <p>This is a description of the training</p>  |
---------------------------------------------------------------------------------------
| 2      | French training            | <p>This contains HTML tags from a WYSIWYG</p> |
---------------------------------------------------------------------------------------
| 3      | How to use the application | <p>Description</p>                            |
---------------------------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)

tWriteJSONField,列映射到JSON,如下所示:

path
|-- id [loop element] --> IdForm
|-- name              --> NomForm
|-- description       --> DescrForm
Run Code Online (Sandbox Code Playgroud)

tWriteJSONField输出与输入具有相同列的新通量(尽管这些列在输出中都是空的,即使它们已在输入中填充)并添加jsonStructure包含生成的JSON 的新列.

这个新的通量被a捕获tExtractJSONFields(该组件的配置在我的原始帖子中可用).

tExtractJSONFields 输出这个通量:

--------------------------
| IdForm | jsonStructure |
--------------------------
| 1      | { "id": "1" } |
--------------------------
| 2      | { "id": "2" } |
--------------------------
| 3      | { "id": "3" } |
--------------------------
Run Code Online (Sandbox Code Playgroud)

我期待它返回这个:

--------------------------------------------------------------------------------------------
| IdForm | jsonStructure                                                                   |
--------------------------------------------------------------------------------------------
| 1      | { "id": "1", "name": "English training", "description": "<p>This is[...]</p>" } |
--------------------------------------------------------------------------------------------
| 2      | { "id": "2", "name": "French training", "description": "<p>[...]</p>" }         |
--------------------------------------------------------------------------------------------
| 3      | { "id": "3", "name": "How to use the [...]", "description": "<p>[...]</p>" }    |
--------------------------------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)

编辑2

我使用TOS 5.4.0.r110020,如果它可以帮助.

Jul*_*lay 6

您对JSONStructure列的XPath请求不正确.只需删除"*"即可获得预期结果.

给XPathQuery

此外,如果您不需要json条目中的根节点,只需在tWriteJsonField上选中"删除根节点",并在tExtractJSONFields中将Loop XPath Query更改为"/"

删除tExtractJSONFields上的根节点