2011-04-26 10 views
0

私が作成しているWebサイトでは、サーバーからJSON文字列として提供されたデータに基づいて見積もりを作成する必要があります。私はこのサイト(およびその他のサイト)を見てきましたが、依然としてデータを検索/検索する最良の方法は不明です。JSON内で値を照会/検索する

たとえば、エリアIDからエリア名を取得する必要があります。私は、エリアの最大年齢と、与えられた最小/最大年齢の価格を取得する必要があります。

私はまた、価格の配列を取得したいと思います。

evalメソッドを使用して文字列からJavascriptオブジェクトを作成することをお勧めしますか?あるいは、私はjQueryを使うべきですか?

ありがとうございました。

({"SkiPass":[{"Id":1,"Area":"Chamonix","Rates":[{"Id":1,"AgeMin":0,"AgeMax":2,"Price":2.5},{"Id":2,"AgeMin":3,"AgeMax":17,"Price":5.0},{"Id":3,"AgeMin":18,"AgeMax":30,"Price":6.2},{"Id":4,"AgeMin":31,"AgeMax":59,"Price":7.4}]}, 

{"Id":2,"Area":"Megeve","Rates":[{"Id":1,"AgeMin":0,"AgeMax":2,"Price":1},{"Id":2,"AgeMin":3,"AgeMax":17,"Price":2.0},{"Id":3,"AgeMin":18,"AgeMax":30,"Price":2.2},{"Id":4,"AgeMin":31,"AgeMax":59,"Price":4.4}]}, 

{"Id":3,"Area":"Verbier","Rates":[{"Id":1,"AgeMin":0,"AgeMax":2,"Price":1.5},{"Id":2,"AgeMin":3,"AgeMax":17,"Price":3.0},{"Id":3,"AgeMin":18,"AgeMax":30,"Price":4.2},{"Id":4,"AgeMin":31,"AgeMax":59,"Price":5.4}]}]}) 
+0

あなたはJSONのXPathが同等たいように聞こえます。データがXMLとして取得される可能性がありますか? – Dan

+0

@ダン - 下記の返信をご覧ください。このJSライブラリでは、XPath –

答えて

1

ほとんど間違いなく、文字列からJavaScriptオブジェクトを作成しますが、合法的なJSONの解析施設ではなく、「のeval()」でそれを行います。 にはを使うことができますが、他のソリューション(例えば、json.orgから入手可能なJSONツール)があります。これは小さくてシンプルです。

JavaScriptオブジェクトであれば、クエリソリューションが必要かどうか、あるいは単にプログラミングの単なる問題であるかどうかを判断する必要があります。

1

私は最も良い方法はjLinq:http://hugoware.net/Projects/jLinqだと思います。これはJSONでSQLクエリを実行するようなものです。 jQueryは必要ありません。 私はそれを使用し、素晴らしいです。

+0

を使用してJSON構造をクエリできるようになりました。for文を使用してオブジェクトを反復処理することによって必要な情報が見つかりました。これはjLinqのようなものを使うよりはるかに速く/遅くなるでしょうか? – FloatLeft

0

すでにjQueryを使用している場合は、JSON.parse()またはjQuery.parseJSON()を使用してJSON文字列からオブジェクトを作成するか、JSONとしてサーバー側から渡すだけです。

オブジェクトを繰り返して、必要なレコードを見つけることができます。または、オブジェクトを構築して、自然にデータを取得できるようにすることもできます。

+0

私は既にページ上でjQueryを多用しているので意味があります。しかし、次のように動作していないようです: var skiPasses = jQuery.parseJSON({"SkiPass":[{"" Id ":"エリア ":"シャモニー "、"レート ":[{" ID " 1、 "AgeMin":0、 "AgeMax":2、 "Price":2.5}、{"Id":2、 "AgeMin":3、 "AgeMax":17、 "Price":5.0}、{"Id ":3、" AgeMin ":18、" AgeMax ":30、" Price ":6。3、 "Area": "Verbier"、 "Rates":2、{"Id":4、 "AgeMin":31、 "AgeMax":59、 "Price":7.4} 「AgeMin」:0、「AgeMax」:2、「Price」:1.5、「Id」:2、「AgeMin」:3、「AgeMax」:17、「Price」: 「AgeMin」:18、「AgeMax」:30、「Price」:4.2、「Id」:4、「AgeMin」:31、「AgeMax」:59、「価格」: ":5.4}]}}}) – FloatLeft

+1

これはオブジェクトで呼び出すためです。 parseJSON( "name ':' Aviv '})は動作しませんが、parseJSON(" {' name ':' Aviv '} ")は動作します。 – aviv

0

FloatLeft - Danが指摘しているように、XPathを使用することができればあなたの仕事ははるかに簡単ですが、XML形式でデータを書き直す必要はありません。 DefiantJS(http://defiantjs.com)を使用すると、になり、XPath式でJSON構造をクエリできます。

DefiantJSは、XPathクエリを有効にし、一致する配列(一致するものが見つからなければ空の配列)を返すメソッド "search"でグローバルオブジェクトJSONを拡張します。返される配列には集約関数も用意されています。これらのうちの1つ "sortDesc"。

この作業フィドルを確認してください。
http://jsfiddle.net/hbi99/H3PR3/

var data = { 
    "SkiPass": [ 
     ... 
     { 
     "Id": 3, 
     "Area": "Verbier", 
     "Rates": [ 
      { "Id": 1, "AgeMin": 0, "AgeMax": 2, "Price": 1.5 }, 
      { "Id": 2, "AgeMin": 3, "AgeMax": 17, "Price": 3 }, 
      { "Id": 3, "AgeMin": 18, "AgeMax": 30, "Price": 4.2 }, 
      { "Id": 4, "AgeMin": 31, "AgeMax": 59, "Price": 5.4 } 
     ] 
    } 
    ] 
}, 
res1 = JSON.search(data, '//SkiPass[Id=3]/Area'), 
res2 = JSON.search(data, '//*[Area and Id=3]/Rates') 
      .sortDesc('AgeMax'); // <-- sorting descending by the value of "AgeMax" 

document.getElementById('name').innerHTML = res1; 

document.getElementById('max_age').innerHTML = res2[0].AgeMax; 
document.getElementById('price').innerHTML = res2[0].Price; 
関連する問題