2013-12-12 14 views
6

Eski bir veri tabanını yeni uygulamamıza taşımaya çalışıyorum.JSON'u Talend Open Studio kullanarak bir alana yaz.

süreçte, yeni MySQL db bir tarlada saklanmalıdır bir JSON yaratmak için eski db veri kapmak gerekir.

yüzden bileşenleri tWriteJSONField ve tExtractJSONFields kullanın. tWriteJSONField yılında

, benim XML ağaç gibi görünür:

path 
|-- id [loop element] 
|-- name 
|-- description 

N.B. : loop element ve group element özelliklerinin nasıl kullanılacağını bulamıyorum. Nasıl çalıştığını anlamıyorum ve belgeler bunun hakkında konuşmuyor.

tWriteJSONField bileşeni, id ürününü JSON'dan ayıklamak için tExtractJSONFields'a bağlanır. Her kaydın JSON'a bağlı olduğunu bilmem gerekiyor.

tExtractJSONFields yapılandırma: XPath isteği

"/path" 

tExtractJSONFields yapılandırma: Haritalama

----------------------------------------------- 
| column  | XPath request | get nodes ? | 
----------------------------------------------- 
| idForm  | "id"   | false  | 
----------------------------------------------- 
| jsonStructure | "*"   | yes   | 
----------------------------------------------- 

Sorunum tExtractJSONField tarafından jsonStructure çıktıda, ben sadece benim kök Etiketin ilk çocuğu olsun . Benim durumumda jsonStructure şuna benzer:

{ 
    "id": "123" 
} 

Beklenen sonuç: Ben mesela id önce çocuğu name bildirirseniz

{ 
    "id": "123", 
    "name": "Test", 
    "description": "Test" 
} 

, alacağım:

{ 
    "name": "Test" 
} 

Ben jsonStructure için XPath sorgusunu değiştirmeyi denedim, ancak tüm alanları asla alamıyorum.

Neden?

Bu Talend hakkında benim ilk soru, bu yüzden bilgilere sahip değilse, bana yorum olarak bildirin.

Yardımlarınız için teşekkürler.

DÜZENLEME:

Veri tMysqlInput den tWriteJSONField için:

N.B. : Akım daha fazla sütun içeriyor, ancak sadece JSON'u oluşturmak için kullanılanları gösteriyorum.tWriteJSONField olarak

--------------------------------------------------------------------------------------- 
| 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>       | 
--------------------------------------------------------------------------------------- 

, sütunlar böyle JSON eşlenir:

path 
|-- id [loop element] --> IdForm 
|-- name    --> NomForm 
|-- description  --> DescrForm 

tWriteJSONField çıkış girişi ile aynı sütun ile yeni bir akı (bu kolonlar her çıkış boş olmasına rağmen Girdi olarak doldurulmuş olsalar bile) ve oluşturulan JSON'u içeren yeni bir jsonStructure ekleyin.

Bu yeni akı tExtractJSONFields tarafından yakalandı (bu bileşenin yapılandırması, özgün gönderiimde kullanılabilir).

tExtractJSONFields çıkışlar bu akı:

-------------------------- 
| IdForm | jsonStructure | 
-------------------------- 
| 1  | { "id": "1" } | 
-------------------------- 
| 2  | { "id": "2" } | 
-------------------------- 
| 3  | { "id": "3" } | 
-------------------------- 

Ve bunu beklemek döndüren bu bir:

-------------------------------------------------------------------------------------------- 
| 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>" } | 
-------------------------------------------------------------------------------------------- 

DÜZENLEME 2

elinden eğer TOS 5.4.0.r110020 kullanmak yardım et.

+0

wow! test etmeden cevap vermek zor. Dışarıdaki JSON ve giriş verilerinizin bir örneğini sağlayabilir misiniz? Sahte verilerle, Ve lütfen birkaç saat sabırlı ol! ;) –

+0

Yardımlarınız için teşekkürler. Daha fazla ayrıntı eklemek için yayınımı düzenledim. Umarım yeterlidir. – Elorfin

cevap

6

JSONStructure sütunu için XPath isteğiniz doğru değil. Sadece "*" yi kaldır ve beklenen sonucu alacaksın. Eğer json girişindeki kök düğüm gerekmiyorsa da

XPathQuery

, sadece Döngü XPath sorgusu tWriteJsonField üzerinde "kök düğümü Kaldır" ve değişim kontrol "/" tExtractJSONFields içinde

Remove Root Node on tExtractJSONFields için

+1

Teşekkürler. Zamanımın çoğunu bu şova harcadım **. – Elorfin