2012-03-12 3 views
5

В принципе, я хочу, чтобы в Javascript (JQuery необязательно), чтобы искать в JSON с вложенными элементами для определенного элемента и редактировать его.Поиск и редактирование вложенных элементов JSON

Ex. найдите «компоненты» с идентификатором 110 и измените имя на «видеокарту».

Обратите внимание, что следующий пример JSON - это просто пример. Мне интересно, существуют ли библиотеки javascript или хорошие трюки, я не думаю, что лучшее решение для всего 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

обход объекта является *** только *** варианта. Все ответы, которые вы получите здесь, будут делать так или иначе. – Matt

+0

Хорошо, но я считаю, что библиотеки существуют уже для того, чтобы делать такую ​​вещь, в частности, не только поиск внутри JSON, но и разрешение на редактирование. – Fr4ncis

+2

Просто, чтобы избавиться от пути: к тому времени, когда вы его ищете, это уже не JSON; это просто граф объектов. –

ответ

2

Вы можете попробовать linq.js.

+0

Я использовал linq.js в значительной степени, и, хотя немного многословный, он отлично работает! –

1

Вы можете использовать эту javascript lib, DefiantJS (http://defiantjs.com), с помощью которой вы можете фильтровать совпадения с использованием XPath на структурах JSON. Поместить его в код 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'; 

Здесь находится рабочая скрипка;
http://jsfiddle.net/g8fZw/

DefiantJS расширяет глобальный объект JSON с помощью метода «поиск» и возвращает массив со спичками (пустой массив, если не было найдено ни одного совпадения). Вы можете попробовать Lib и XPath запросов с использованием XPath Evaluator здесь:

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

Смежные вопросы