2012-10-09 31 views
8

मैं एक समस्या है के एक सबसेट के रूप में पाने के लिए करना चाहते हैं मैं शारीरिक श्रम का एक बहुत खर्च करने के लिए एक विकल्प के रूप का विश्लेषण करने की जरूरत नहीं करने के लिए हल करने के लिए।JSON diff, कुछ JSON एक और JSON

2 JSON ऑब्जेक्ट (विभिन्न वेब सेवा एपीआई या HTTP प्रतिक्रियाओं से लौटे) है। 2 JSON ऑब्जेक्ट्स के बीच डेटा छेड़छाड़ कर रहा है, और वे समान JSON संरचना साझा करते हैं, लेकिन समान नहीं हैं। एक JSON (छोटा एक) बड़ा JSON ऑब्जेक्ट का सबसेट की तरह है।

मैं दो वस्तुओं के बीच सभी interesecting डेटा खोजना चाहते हैं। असल में, मैं ऑब्जेक्ट के भीतर साझा पैरामीटर/गुणों में अधिक रुचि रखता हूं, वास्तव में प्रत्येक ऑब्जेक्ट के पैरामीटर/गुणों के वास्तविक मान नहीं। क्योंकि मैं अंततः एक JSON आउटपुट से डेटा का उपयोग अन्य JSON को एपीआई कॉल में इनपुट के रूप में बनाने के लिए करना चाहता हूं। दुर्भाग्यवश, मेरे पास प्रलेखन नहीं है जो प्रत्येक एपीआई के लिए JSON को परिभाषित करता है। :(

यह कठिन क्या है JSON ऑब्जेक्ट्स बहुत बड़ा है। यदि आप इसे विंडोज नोटपैड के माध्यम से प्रिंट करते हैं तो एक पृष्ठ फैलाता है। दूसरा 37 पृष्ठों को फैलाता है। एपीआई जेएसओएन आउटपुट को एक लाइन के रूप में संपीड़ित करता है। सामान्य पाठ तुलना बहुत अधिक नहीं करती है, मुझे ऑब्जेक्ट w/newlines, आदि को तोड़ने के लिए मैन्युअल रूप से या w/स्क्रिप्ट को दोबारा सुधारना होगा। पाठ की तुलना में अच्छी तरह से प्रयास करें।

मैन्युअल खोज/grep लेकिन यह छोटे JSON के अंदर सभी मानकों के माध्यम से चक्र का दर्द है। ऐसा करने के लिए कोड लिख सकता है लेकिन मुझे ऐसा करने के लिए समय बिताना होगा, और अगर कोड भी काम करता है तो परीक्षण करें। या शायद कुछ तैयार है पहले से ही कोड बनाया गया है ...

या जेएसओएन diff प्रकार के उपकरण के लिए देख सकते हैं। कुछ के लिए खोजा। इन में आए:

https://github.com/samsonjs/json-diff या https://tlrobinson.net/projects/javascript-fun/jsondiff

https://github.com/andreyvit/json-diff

दोनों मैं चाहता था करने में नाकाम रही। संभवतः जेएसओएन प्रक्रिया के लिए बहुत जटिल या बहुत बड़ा है।

सर्वोत्तम समाधान पर कोई विचार? या अब प्रत्येक पैरामीटर/संपत्ति के लिए मैन्युअल विश्लेषण w/grep होने का सबसे अच्छा समाधान हो सकता है?

कोड समाधान के मामले में, कोई भी भाषा करेगा। मुझे बस एक पार्सर या डिफ टूल चाहिए जो मैं चाहता हूं।

क्षमा करें, आपके साथ JSON डेटा संरचना साझा नहीं कर सकते हैं, इसे गोपनीय माना जा सकता है।

+0

आप जानते हैं आप कर सकते हैं कि आसानी से सुंदर प्रिंट नई-पंक्तियों और खरोज साथ JSON डेटा? –

+0

एफडब्ल्यूआईडब्ल्यू: जेएसओएन टेक्स्ट के 37 डिस्प्ले पेज "विशाल" से बहुत दूर हैं; मैं घटना को "बड़ा" नहीं मानूंगा, बल्कि सिर्फ "छोटा नहीं"। –

+0

@ user1689607, आप JSON डेटा को सुंदर-प्रिंट कैसे करते हैं? मैं अजाक्स/jquery/जेएस वेब डेवलपर नहीं हूं, वेब देव w/नवीनतम तकनीकों को नहीं किया है, केवल गैर AJAX सामान साल पहले किया था। मैं आजकल एप्स का परीक्षण करता हूं। – David

उत्तर

1

मेरे पास एक छोटा जीपीएल प्रोजेक्ट है जो सरल JSON के लिए चाल करेगा। मैंने नेस्टेड इकाइयों के लिए समर्थन नहीं जोड़ा है क्योंकि यह एक साधारण ऑब्जेक्ट डीबी समाधान है और वास्तव में जेएसओएन नहीं है (इस तथ्य के बावजूद कि यह स्पष्ट रूप से प्रेरित था।

एपीआई बहुत लंबा और छोटा है। नया समूह बनाएं, पॉप्युलेट, और उसके बाद जो कुछ तार्किक मापदंडों आप की जरूरत के माध्यम से एक सबसेट खींच

https://github.com/danielbchapman/groups

एपीआई मूल रूप से इस्तेमाल किया जाता है की तरह है -।>

SubGroup items = group 
        .notEqual("field", "value") 
        .lessThan("field2", 50); //...etc... 

वास्तव में बुनियादी यूनियनों के लिए समर्थन करते हैं और मिलती है जो आप जो चाहते हैं वह बहुत कुछ करेंगे।

लंबे और छोटे आप शायद अपने डेटा-प्रकार के रूप में सेट चाहते हैं। आपकी तुलना को ध्यान में रखते हुए शायद जटिल हैं, आपको विधियों के एक और जटिल सेट की आवश्यकता है।

मेरा एकमात्र सावधानी यह है कि यह जीपीएल है। यदि आपका डेटा गोपनीय है, तो बाधाएं आपको उस लाइसेंस में रूचि नहीं दे सकती हैं।

+0

धन्यवाद, मैं इसे कभी-कभी देखता हूं, यह सुनिश्चित नहीं करता कि मुझे इसकी आवश्यकता है या नहीं। – David

8

Beyond Compare काम करता है अच्छी तरह से, यदि आप इसे में एक JSON फ़ाइल प्रारूप की स्थापना Python उपयोग करने के लिए बहुत-प्रिंट JSON करने के लिए। विंडोज के लिए नमूना सेटअप:

  1. पायथन 2.7 स्थापित करें।
  2. तुलना में परे, फ़ाइल प्रारूपों के तहत, उपकरण के अंतर्गत जाएं।
  3. नया क्लिक करें। टेक्स्ट प्रारूप चुनें। नाम के रूप में "JSON" दर्ज करें।
    • मास्क: *.json
  4. रूपांतरण टैब के अंतर्गत:
    • रूपांतरण: बाहरी कार्यक्रम (यूनिकोड फ़ाइल नाम)
    • लोड हो रहा है: c:\Python27\python.exe -m json.tool %s %t
        सामान्य टैब के अंतर्गत
      • नोट, वह दूसरा पैरामीटर कमांड लाइन में %t होना चाहिए, यदि आप दो %s एस दर्ज करते हैं तो आपको डेटा हानि होगी।
  5. सहेजें पर क्लिक करें।
+1

मुझे लोडिंग पथ के लिए "c: \ Python27 \ python.exe -m json.tool% s% t" दर्ज करना था (बाद वाले चर के लिए% s के बजाय% t)। –

2

जेरेमी सीमन्स BEYOND COMPARE कि अजगर की आवश्यकता नहीं है या तो स्थापित होने के लिए के लिए एक बेहतर फ़ाइल स्वरूप पैकेज Posted on forum: "JsonFileFormat.bcpkg" बनाया गया है।

बस फ़ाइल डाउनलोड करें और इसे बीसी के साथ खोलें और आप जाने के लिए अच्छे हैं। तो, यह बहुत आसान है।

JSON फ़ाइल प्रारूप

मैं JSON फ़ाइलों के लिए एक फ़ाइल स्वरूप की जरूरत है।

मैं बहुत प्रिंट & तरह तुलना आसान बनाने के लिए मेरी JSON करना चाहता था।

मैं अपने पूरा JSON फ़ाइल प्रारूप के साथ मेरी bcpackage संलग्न है। http://stedolan.github.io/jq/

प्रॉप्स उपयोगिता https://github.com/stedolan के लिए स्टीफन डोलन के लिए -

स्वरूपण JQ के माध्यम से किया जाता है।

मैंने स्कूटर सॉफ्टवेयर पर लोगों को एक संदेश भेजा है कि उन्हें पर अतिरिक्त प्रारूपों के साथ पृष्ठ में शामिल किया गया है।

यदि आप इसे वहां देखने में रुचि रखते हैं, तो मुझे यकीन है कि पर एक त्वरित उत्तर एक अप-वोट के साथ थ्रेड उन्हें मूल्य पोस्ट करने में मदद करेगा। संलग्न फ़ाइलें संलग्न फ़ाइलें फ़ाइल प्रकार: bcpkg JsonFileFormat.bcpkg (449.8 KB, 58 बार देखा गया)

+0

हम्म ... मुझे आश्चर्य है कि यह किस संस्करण के साथ काम करता है या सटीक इंस्टॉल चरण। बीसी 4 के साथ एक मैक पर। टूल्स> आयात सेटिंग्स पर, डाउनलोड की गई पीकेजी फ़ाइल का चयन करें, फिर अगली स्क्रीन आयात करने के लिए फ़ाइल स्वरूपों को चुनना है और यह खाली है, और आगे नहीं बढ़ सकता है, जब तक कि मैं "सभी मौजूदा फ़ाइल स्वरूपों को हटाने" के लिए चेकबॉक्स चेक नहीं करता, लेकिन मैं ' टी मान लीजिए कि यह अच्छा विचार है, मैंने वहां रुक दिया। – David

+0

@ डेविड - मैं इसका उपयोग बीसी 3 + विंडोज 8.1 x 64 पर कर रहा हूं। मुद्दा यह है कि यह विंडोज़ .exe का उपयोग करता है, इसलिए मुझे यकीन नहीं है कि इसे मैक पर कैसे रखा जाए। हालांकि ऐप का एक ओएसएक्स संस्करण भी मौजूद है। आप इसे विंडोज़ पर परीक्षण करने के लिए कोशिश कर सकते हैं और/या मैक के लिए इसे कैसे करें इस पर पैकेज के लेखक से संपर्क कर सकते हैं। मेरा विचार यह है कि यह मैक पर ऐसा करने के लिए जटिल नहीं होना चाहिए - लेकिन, क्योंकि मेरे पास एक नहीं है, मैं इसे आपके लिए समझ नहीं सकता। –

+0

@ डेविड - मैंने SQLite के लिए एक बीसी आधारित समाधान भी पोस्ट किया - यहां: http://sqa.stackexchange.com/a/14283/13028 - यह दिखाता है कि बीसी पर फ़ाइल प्रकारों को कॉन्फ़िगर कैसे करें। इनमें से दोनों उपयोगकर्ता बीसी के लिए फ़ाइल एक्सटेंशन का योगदान कर रहे हैं। एक प्री-पैक किया गया है, दूसरे के पास कैसे है। अगर यह आपके लिए काम करता है तो मुझे बताएं। यदि नहीं, तो मेरे पास अधिक समय होने पर मैं आपकी सहायता करने की कोशिश करूंगा PS: फिर, मेरे पास मैक नहीं है इसलिए मैं इसे निश्चित रूप से परीक्षण नहीं कर सका। –