2012-10-25 18 views
15

मुझे एक परिदृश्य मिला।JSON JSON ट्रांसफॉर्मर

आवश्यक इनपुट और आउटपुट JSON हैं।

// Input 
{ 
    "OldObject": { 
    "Time": 1351160457922, 
    "Name": "OName", 
    "quantity": 100, 
    "price": 10 
    } 
} 


// Output 
{ 
    "NewObject": { 
    "Time": 1351160457922, 
    "Title": "OName", 
    "quantity": 100 
    } 
} 

मुझे कुछ प्रारूप कोड या अधिमानतः xslt टाइप भाषा की आवश्यकता है जो जेसन को एक प्रारूप से दूसरे प्रारूप में बदलने के लिए है। इस ट्रांसफॉर्मर को भी तेजी से होना चाहिए क्योंकि फ्लाई पर रूपांतरण किया जाएगा।

संपादित
मैं इनपुट वस्तु की परिभाषा नहीं है प्राप्त हुआ है और यह रन टाइम पर बदल सकता है। लेकिन यदि आवश्यक हो तो मैं OUTPUT ऑब्जेक्ट के लिए कक्षा का उपयोग कर सकता हूं। मैंने इसे जेसन -> xml -> xslt -> xml -> json के रूप में करने की कोशिश की है, लेकिन इस अंत में प्रति सेकंड लगभग 1000 ऑब्जेक्ट प्राप्त होते हैं और इस प्रक्रिया में ओवरहेड हो सकता है।
मैं जावास्क्रिप्ट का उपयोग भी नहीं कर सकता क्योंकि myApp सरल है विंडोज आधारित जावा एप्लिकेशन और जावास्क्रिप्ट का उपयोग ओवरहेड का कारण बन सकता है।

+0

हाँ, निश्चित रूप से, मैं जावास्क्रिप्ट का उपयोग कर सकता हूं। लेकिन अधिक अधिमानतः xslt प्रकार भाषा और ट्रांसफार्मर प्रोसेसर –

+3

JSON पैच के बारे में क्या? http://tools.ietf.org/html/draft-pbryan-json-patch-00 –

+1

आप इसके लिए कार्यान्वयन पा सकते हैं, उदाहरण के लिए: https://github.com/bruth/jsonpatch-js –

उत्तर

4

आप ज़ोरबा और जेसनआईक्यू http://www.jsoniq.org/ का उपयोग कर सकते हैं हालांकि, यह मूल पुस्तकालय है, यह एक रैपर के साथ आता है ताकि आप इसे जावा में उपयोग कर सकें।

+0

बाद में मेरे रैपर पर एक नज़र डालें, सहायक हो सकता है: https://github.com/mvallebr/ZorbaJavaWrapper – mvallebr

9

आप JSON patch के साथ यह परिवर्तन कर सकते हैं। jsonpatch-js साथ

उदाहरण:

var transformations = [ 
    { move: '/OldObject', to: '/NewObject' }, 
    { remove: '/NewObject/price' }, 
    { move: '/NewObject/Name', to: '/NewObject/Title' } 
]; 

var oldObject = { "OldObject": { "Time": 1351160457922, "Name": "OName", "quantity": 100, "price": 10 } }; 

jsonpatch.apply(oldObject, transformations); 

मैं यह परीक्षण नहीं किया, लेकिन इस तरह काम करना चाहिए।

+0

एक छोटी सी चिंता - क्या यह पर्याप्त प्रदर्शन-वार होगा क्योंकि इस जावास्क्रिप्ट को प्रति सेकंड लगभग 1000 JSON ऑब्जेक्ट्स पैच करना होगा? –

+0

यह आपकी स्थिति पर निर्भर करता है। यदि आप सर्वर पक्ष पर ऐसा करना चाहते हैं, तो आप अलग-अलग भाषाओं में अलग-अलग कार्यान्वयन कर सकते हैं। मैंने इसे पोस्ट किया क्योंकि आपके प्रश्न में एक जावास्क्रिप्ट टैग था। –

+0

मैं जावा का उपयोग कर रहा हूं और यह विंडोज आधारित डेस्कटॉप एप्लीकेशन होगा। –

14

JOLT आज़माएं। यह जावा में लिखित जेएसओएन रूपांतरण पुस्तकालय के लिए एक JSON है। यह एक ऐसी परियोजना पर बनाया गया था जो एक एलएक्सएक्सशर्च "बैकएंड" से एक फ्रंटएंड एपीआई में जेएसओएन को बदल रहा था।

JSON के लिए बदलने आप अपनी समस्या में सूचीबद्ध किया है, जोल्ट "बदलाव" कल्पना होगा:

// Jolt "shift" spec 
{ 
    "OldObject": { 
     "Time": "NewObject.Time", 
     "Name": "NewObject.Title", // if the input has "OldObject.Name", copy it's value 
            // to "NewObject.Title 
     "quantity": "NewObject.quantity" 
    } 
} 
0

आप जावा पुस्तकालय Silencio है कि आप की अनुमति देता है की कोशिश कर सकते JSON फ़ाइल के प्रत्येक नोड को नए मानों में परिवर्तित करने के लिए। आप तय कर सकते हैं कि कौन से और कैसे नोड्स को बदला जाना चाहिए।

0

एक अन्य विकल्प Logz.io Sawmill लाइब्रेरी का उपयोग करता है। आप एक पाइपलाइन परिभाषित करते हैं और इसे निष्पादित करते हैं। आपके लिए उदाहरण:

{ 
    steps: [ 
    { 
     rename { 
     config { 
      from: "OldObject" 
      to: "NewObject" 
     } 
     } 
    } 

    { 
     removeField { 
     config { 
      path: "NewObject.price" 
     } 
     } 
    } 

    { 
     rename { 
     config { 
      from: "NewObject.Name" 
      to: "NewObject.Title" 
     } 
     } 
    } 
    ] 
}