我尝试将旧数据库的数据迁移到我们的新应用程序中。
在进程中,我需要从旧数据库中获取数据以创建一个必须存储在新MySQL数据库中的字段中的JSON。
所以我使用了组件tWriteJSONField
和tExtractJSONFields
。
在tWriteJSONField
中,我的XML树看起来像这样:
path
|-- id [loop element]
|-- name
|-- description
N.B。 :我找不到如何使用loop element
和group element
属性。我不明白它是如何工作的,文档也没有谈到这个。
组件tWriteJSONField
已链接到tExtractJSONFields
,以便从JSON中提取id
。我需要知道每个记录JSON必须链接。
tExtractJSONFields
配置: XPath请求
"/path"
tExtractJSONFields
配置:映射
-----------------------------------------------
| column | XPath request | get nodes ? |
-----------------------------------------------
| idForm | "id" | false |
-----------------------------------------------
| jsonStructure | "*" | yes |
-----------------------------------------------
我的问题是jsonStructure
输出tExtractJSONField
,我只得到了我的root标签的第一个孩子。在我的情况下,jsonStructure
看起来像这样:
{
"id": "123"
}
预期结果是:
{
"id": "123",
"name": "Test",
"description": "Test"
}
例如,如果我在name
之前声明孩子id
,我会得到:
{
"name": "Test"
}
我曾尝试更改jsonStructure
的XPath查询,但我从未获得所有字段。
为什么?
这是我关于Talend的第一个问题,所以如果它缺少信息,请在评论中告诉我。
感谢您的帮助。
编辑:
从tMysqlInput
到tWriteJSONField
的数据:
N.B。 :My flux包含更多列,但我只显示用于创建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> |
---------------------------------------------------------------------------------------
在tWriteJSONField
中,列映射到JSON,如下所示:
path
|-- id [loop element] --> IdForm
|-- name --> NomForm
|-- description --> DescrForm
tWriteJSONField
输出一个与输入相同列的新通量(尽管这些列在输出中都是空的,即使它们已在输入中填充)并添加一个新的jsonStructure
包含生成JSON。
这个新的通量由tExtractJSONFields
捕获(此组件的配置可在我的原始帖子中找到)。
tExtractJSONFields
输出此通量:
--------------------------
| IdForm | jsonStructure |
--------------------------
| 1 | { "id": "1" } |
--------------------------
| 2 | { "id": "2" } |
--------------------------
| 3 | { "id": "3" } |
--------------------------
我希望它能归还这一个:
--------------------------------------------------------------------------------------------
| 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>" } |
--------------------------------------------------------------------------------------------
编辑2
如果可以提供帮助,我会使用TOS 5.4.0.r110020。
答案 0 :(得分:6)
您对JSONStructure列的XPath请求不正确。只需删除“*”即可获得预期结果。
此外,如果您不需要json条目中的根节点,只需检查tWriteJsonField上的“删除根节点”,并在tExtractJSONFields中将Loop XPath Query更改为“/”