2013-12-12 4 views
6

का उपयोग कर जेएसओएन को एक फ़ील्ड में लिखें, मैं डेटा को हमारे नए एप्लिकेशन में पुराने डेटाबेस को माइग्रेट करने का प्रयास करता हूं।Talend ओपन स्टूडियो

प्रक्रिया में, मुझे एक JSON बनाने के लिए पुराने डीबी से डेटा को पकड़ने की आवश्यकता है जिसे नए MySQL डीबी में किसी फ़ील्ड में संग्रहीत किया जाना चाहिए।

तो मैं घटक tWriteJSONField और tExtractJSONFields का उपयोग करता हूं।

tWriteJSONField में, मेरा एक्सएमएल पेड़ इस तरह दिखता है:

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 के बारे में मेरा पहला सवाल है, इसलिए यदि इसमें जानकारी की कमी है, तो मुझे टिप्पणियों में बताएं।

सहायता के लिए धन्यवाद।

संपादित करें:

डाटा tMysqlInput से tWriteJSONField रहे हैं:

N.B. : मेरे प्रवाह में अधिक कॉलम हैं लेकिन मैं केवल आपको दिखाता हूं जिसका उपयोग 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 जोड़ें जिसमें जेनरेट जेएसओएन शामिल है।

यह नया प्रवाह 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

मैं टीओएस 5.4.0.r110020 का उपयोग करता है, तो यह कर सकते हैं मदद।

+0

वाह! परीक्षण के बिना जवाब देना मुश्किल है। क्या आप अपने जेएसओएन और आपके इनपुट डेटा का नमूना प्रदान कर सकते हैं? नकली डेटा के साथ, ओसीसी। और कृपया कुछ घंटों तक धीरज रखो! ;) –

+0

मदद के लिए धन्यवाद। मैंने अधिक जानकारी जोड़ने के लिए अपनी पोस्ट संपादित की है। उम्मीद है कि यह पर्याप्त है। – Elorfin

उत्तर

6

JSONStructure कॉलम के लिए आपका XPath अनुरोध सही नहीं है। बस "*" को हटा दें और आपको अपेक्षित परिणाम मिलेंगे।

XPathQuery

इसके अलावा, अगर आप json प्रविष्टि में रूट नोड की जरूरत नहीं है, बस की जाँच tWriteJsonField पर "रूट नोड निकालें" और लूप XPath क्वेरी को बदलने "/" tExtractJSONFields में

Remove Root Node on tExtractJSONFields को

+1

धन्यवाद। मैंने इस sh ** पर अपना पूरा समय बिताया। – Elorfin

संबंधित मुद्दे