2012-03-12 18 views
5

Zasadniczo chcę móc, w JavaScript (opcjonalnie JQuery), przeszukiwać JSON z zagnieżdżonymi elementami dla konkretnego elementu i edytować go.Wyszukiwanie i edycja zagnieżdżonych elementów JSON

Przykł. wyszukaj "komponenty" z id 110 i zmień nazwę na "karta wideo".

Zauważ, że następujący JSON jest tylko przykładem. Zastanawiam się, czy istnieją biblioteki javascript lub dobre sztuczki, aby coś takiego zrobić, nie wydaje mi się, żeby najlepszym rozwiązaniem było przechodzenie przez całe json lub pisanie własnych metod.

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

Ruch obiektu jest tylko opcja *** ***. Wszystkie odpowiedzi, które tu uzyskasz, zrobią to w ten czy inny sposób. – Matt

+0

Ok, ale uważam, że biblioteki już istnieją, aby coś takiego zrobić, w szczególności nie tylko przeszukując JSON, ale także pozwalając mi go edytować. – Fr4ncis

+2

Tylko po to, aby usunąć go z drogi: do czasu, gdy go przeszukujesz, nie jest to już JSON; to tylko wykres obiektów. –

Odpowiedz

2

można spróbować linq.js.

+0

Użyłem linq.js w znacznym stopniu, i choć trochę rozwlekły, działa świetnie! –

1

Możesz użyć tej biblioteki javascript, DefiantJS (http://defiantjs.com), za pomocą której możesz filtrować dopasowania przy użyciu XPath na strukturach JSON. Aby umieścić go w kodzie JS:

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

Oto działa skrzypce;
http://jsfiddle.net/g8fZw/

DefiantJS rozszerza globalny obiekt JSON z metodą „Szukaj” i zwraca tablicę z zestawienia (pustą tablicę, jeśli nie znaleziono żadnych wyników). Można wypróbować lib i XPath kwerend przy użyciu XPath Inspekcji tutaj:

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

Powiązane problemy