2012-03-12 12 views
5

असल में मैं जावास्क्रिप्ट (JQuery वैकल्पिक रूप से) में, किसी विशेष तत्व के लिए नेस्टेड तत्वों के साथ JSON में खोजने और इसे संपादित करने में सक्षम होना चाहता हूं।नेस्टेड JSON तत्वों को खोजना और संपादित करना

पूर्व। आईडी 110 के साथ "घटकों" की खोज करें और नाम को "वीडियो कार्ड" में बदलें।

ध्यान दें कि निम्नलिखित JSON केवल एक उदाहरण है। मैं सोच रहा हूं कि जावास्क्रिप्ट पुस्तकालयों या अच्छी चाल ऐसी चीज करने के लिए मौजूद हैं, मुझे नहीं लगता कि पूरे जेसन को पार करना या अपनी खुद की विधियों को लिखना सबसे अच्छा समाधान है।

{ 
    "computers": [ 
    { 
    "id": 10, 
    "components": [ 
     { 
      "id": 56, 
      "name": "processor" 
     }, 
     { 
      "id": 24, 
      "name": "ram" 
     } 
     ] 
    }, 
    { 
     "id": 11, 
     "components": [ 
     { 
      "id": 110, 
      "name": "graphic card" 
     }, 
     { 
      "id": 322, 
      "name": "motherboard" 
     } 
     ] 
    } 
    ] 
} 
+2

वस्तु Traversing *** केवल *** विकल्प है। आप यहां आने वाले सभी उत्तरों को एक या दूसरे तरीके से करेंगे। – Matt

+0

ठीक है, लेकिन मेरा मानना ​​है कि लाइब्रेरी पहले से ही ऐसी चीज करने के लिए मौजूद हैं, विशेष रूप से सिर्फ जेएसओएन के अंदर खोज नहीं बल्कि मुझे इसे वास्तव में संपादित करने की अनुमति भी दे रही है। – Fr4ncis

+2

बस इसे रास्ते से बाहर निकालने के लिए: जब तक आप इसे खोज रहे हों, यह अब JSON नहीं है; यह सिर्फ एक ऑब्जेक्ट ग्राफ है। –

उत्तर

2

आप linq.js को आजमा सकते हैं।

+0

मैंने linq.js को काफी हद तक उपयोग किया है, और हालांकि थोड़ा सा शब्द, यह बहुत अच्छा काम करता है! –

1

आप इस जावास्क्रिप्ट lib, DefiantJS (http://defiantjs.com) का उपयोग कर सकते हैं, जिसके साथ आप JSON संरचनाओं पर XPath का उपयोग करके मैचों को फ़िल्टर कर सकते हैं। इसे जेएस कोड में डालने के लिए:

var data = { 
     "computers": [ 
      { 
      "id": 10, 
      "components": [ 
       { "id": 56, "name": "processor" }, 
       { "id": 24, "name": "ram" } 
      ] 
      }, 
      { 
      "id": 11, 
      "components": [ 
       { "id": 110, "name": "graphic card" }, 
       { "id": 322, "name": "motherboard" } 
      ] 
      } 
     ] 
    }, 
    res = JSON.search(data, '//components[id=110]'); 

res[0].name = 'video card'; 

यहां एक कामकाजी पहेली है;
http://jsfiddle.net/g8fZw/

DefiantJS विधि के साथ वैश्विक वस्तु JSON "खोज" प्रदान करता है और मैचों के साथ एक सरणी (खाली सरणी अगर कोई मिलान नहीं मिले) देता है। आप यहाँ XPath मूल्यांकनकर्ता का उपयोग कर lib और XPath क्वेरी भी आज़मा सकते:

http://www.defiantjs.com/#xpath_evaluator

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