古いデータベースのデータを新しいアプリケーションに移行しようとしています。Talend Open Studioを使用してJSONをフィールドに書き込む
処理中に、新しいDBのフィールドに格納する必要があるJSONを作成するために、古いdbのデータを取得する必要があります。
したがって、私はコンポーネントtWriteJSONField
とtExtractJSONFields
を使用します。 tWriteJSONField
で
、私のXMLツリーは次のようになります。
path
|-- id [loop element]
|-- name
|-- description
N.B. :loop element
とgroup element
プロパティを使用する方法が見つかりません。私はそれがどのように動作するのか分からず、ドキュメンテーションはこれについて話しません。
tWriteJSONField
は、JSONからid
を抽出するためにtExtractJSONFields
にリンクされています。 JSONをリンクする必要がある各レコードを知るためには、これが必要です。
tExtractJSONFields
設定:XPathの要求
"/path"
tExtractJSONFields
設定:マッピング
-----------------------------------------------
| column | XPath request | get nodes ? |
-----------------------------------------------
| idForm | "id" | false |
-----------------------------------------------
| jsonStructure | "*" | yes |
-----------------------------------------------
私の問題は、tExtractJSONField
によってjsonStructure
出力であり、私は私のルートタグの最初の子を取得します。私の場合はjsonStructure
は、次のようになります。
{
"id": "123"
}
期待される結果は次のとおりです。
{
"id": "123",
"name": "Test",
"description": "Test"
}
私は例えばid
前に、子name
を宣言すると、私はなります:私は持っている
{
"name": "Test"
}
をjsonStructure
のXPathクエリを変更しようとしましたが、すべてのフィールドを取得することはありません。
なぜですか?
Talendについての私の最初の質問です。情報が不足している場合は、コメントにお知らせください。
ありがとうございました。
EDIT:tMysqlInput
tWriteJSONField
から
データ:
N.B. :私のフラックスにはより多くの列が含まれていますが、JSONの作成に使用されているものだけを表示します。tWriteJSONField
で
---------------------------------------------------------------------------------------
| 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> |
---------------------------------------------------------------------------------------
は、列は次のようにJSONにマッピングされる。
path
|-- id [loop element] --> IdForm
|-- name --> NomForm
|-- description --> DescrForm
tWriteJSONField
出力入力と同じ列を持つ新しいフラックス(この列は、すべての出力に空であるがそれらが入力に入力されたとしても)生成されたJSONを含む新しい1つをjsonStructure
に追加します。
この新しい磁束はtExtractJSONFields
で捕捉されます(このコンポーネントの構成は、私のオリジナルポストで入手できます)。
tExtractJSONFields
出力する。このフラックス:
--------------------------
| IdForm | jsonStructure |
--------------------------
| 1 | { "id": "1" } |
--------------------------
| 2 | { "id": "2" } |
--------------------------
| 3 | { "id": "3" } |
--------------------------
そして、私はそれを期待しては返すこの1:
--------------------------------------------------------------------------------------------
| 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>" } |
--------------------------------------------------------------------------------------------
EDIT 2
それができるならば、私はTOS 5.4.0.r110020使用助けて。
うわー!それはテストなしでは答えにくいです。 JSONと入力データのサンプルを提供できますか?偽のデータでは、そして、2時間ほど待ってください! ;) –
助けてくれてありがとう。私は詳細を追加するために投稿を編集しました。それが十分であることを願っています。 – Elorfin