Próbuję przenieść dane starej bazy danych do naszej nowej aplikacji.Napisz JSON do pola za pomocą Talent Open Studio
W trakcie procesu muszę pobrać dane ze starej db, aby utworzyć JSON, który musi być przechowywany w polu w nowej bazie danych MySQL db.
Używam komponentów tWriteJSONField
i tExtractJSONFields
.
W tWriteJSONField
moje drzewo XML wygląda następująco:
path
|-- id [loop element]
|-- name
|-- description
nb : Nie mogę znaleźć sposobu korzystania z właściwości loop element
i . Nie rozumiem, jak to działa, a dokumentacja nie mówi o tym.
Składnik tWriteJSONField
jest połączony z tExtractJSONFields
w celu wydzielenia id
z JSON. Muszę to wiedzieć, aby każdy rekord JSON musiał być połączony.
tExtractJSONFields
konfiguracja: zapytanie XPath
"/path"
tExtractJSONFields
konfiguracja: Mapowanie
-----------------------------------------------
| column | XPath request | get nodes ? |
-----------------------------------------------
| idForm | "id" | false |
-----------------------------------------------
| jsonStructure | "*" | yes |
-----------------------------------------------
Mój problem jest w jsonStructure
wyjściu przez tExtractJSONField
, mam tylko pierwsze dziecko mojego tagu głównego . W moim przypadku jsonStructure
wygląda następująco:
{
"id": "123"
}
Oczekiwany wynik to:
{
"id": "123",
"name": "Test",
"description": "Test"
}
Jeśli oświadczam dziecko name
przed id
na przykład, będę się:
{
"name": "Test"
}
mam próbował zmienić zapytanie XPath dla jsonStructure
, ale nigdy nie otrzymam wszystkich pól.
Dlaczego?
To moje pierwsze pytanie dotyczące Talend, więc jeśli brakuje informacji, daj mi znać w komentarzach.
Dzięki za pomoc.
EDIT:
Dane z tMysqlInput
do tWriteJSONField
:
nb : Mój strumień zawiera więcej kolumn, ale pokazuję tylko te, które są używane do tworzenia 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> |
---------------------------------------------------------------------------------------
W tWriteJSONField
kolumny są odwzorowywane JSON tak:
path
|-- id [loop element] --> IdForm
|-- name --> NomForm
|-- description --> DescrForm
tWriteJSONField
wyjście nowy strumienia z tych samych kolumn jako wejście (chociaż to kolumny są puste w produkcji nawet jeśli zostały wypełnione danymi wejściowymi) i dodać nowy jsonStructure
, który zawiera wygenerowany JSON.
Ten nowy strumień zostaje przechwycony przez tExtractJSONFields
(konfiguracja tego komponentu jest dostępna w moim oryginalnym wpisie).
tExtractJSONFields
wyjścia tego topnika:
--------------------------
| IdForm | jsonStructure |
--------------------------
| 1 | { "id": "1" } |
--------------------------
| 2 | { "id": "2" } |
--------------------------
| 3 | { "id": "3" } |
--------------------------
I można oczekiwać, że ten powrót:
--------------------------------------------------------------------------------------------
| 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
użyć TOS 5.4.0.r110020 jeśli można Wsparcie.
wow! Trudno odpowiedzieć bez testowania. Czy możesz podać próbkę swojego JSON i danych wejściowych? Z fałszywymi danymi, ofc. I bądź cierpliwy przez kilka godzin! ;) –
Dzięki za pomoc. Zmodyfikowałem mój wpis, aby dodać więcej szczegółów. Mam nadzieję, że to wystarczające. – Elorfin