2012-03-12 12 views
5

基本的には、Javascript(JQuery(任意))で、特定の要素のネストされた要素を含むJSONを検索して編集できるようにします。ネストされたJSON要素の検索と編集

Ex。 id 110の「components」を検索し、名前を「video card」に変更します。

次の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)を使用すると、JSON構造のXPathを使用して一致をフィルタできます。 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は、メソッド "search"でグローバルオブジェクトJSONを拡張し、一致する配列(一致するものが見つからない場合は空の配列)を返します。あなたは、ここでのXPath評価者を使用してLIBとXPathクエリを試してみることができます。

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

関連する問題