我尝试将旧数据库中的数据迁移到我们的新应用程序中.
在进程中,我需要从旧数据库中获取数据以创建必须存储在新MySQL数据库中的字段中的JSON.
所以我使用组件tWriteJSONField
和tExtractJSONFields
.
在tWriteJSONField
,我的XML树看起来像这样:
path
|-- id [loop element]
|-- name
|-- description
Run Code Online (Sandbox Code Playgroud)
注意:我找不到如何使用loop element
和group 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的第一个问题,所以如果它缺少信息,请在评论中告诉我.
感谢帮助.
编辑:
从数据tMysqlInput
到tWriteJSONField
:
注意:我的通量包含更多列,但我只显示用于创建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,如果它可以帮助.
您对JSONStructure列的XPath请求不正确.只需删除"*"即可获得预期结果.
此外,如果您不需要json条目中的根节点,只需在tWriteJsonField上选中"删除根节点",并在tExtractJSONFields中将Loop XPath Query更改为"/"
归档时间: |
|
查看次数: |
8458 次 |
最近记录: |