Запрос / поиск значений в JSON - PullRequest
0 голосов
/ 26 апреля 2011

Для веб-сайта, который я создаю, я должен создать цитату на основе данных, предоставленных в виде строки JSON с сервера.Я просматривал этот сайт (и многие другие), но все еще не уверен в том, как лучше всего запросить / выполнить поиск данных.

Например, мне нужно получить Название зоны из идентификатора зоны.Мне нужно получить максимальный возраст для области, а также цену для данного минимального / максимального возраста.

Я также хочу получить массив цен.

Лучше ли создаватьJavascript объект из строки, используя метод eval?Или я должен использовать 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}]}]})

Ответы [ 4 ]

1 голос
/ 26 апреля 2011

Я думаю, что лучший метод - это jLinq: http://hugoware.net/Projects/jLinq Это похоже на выполнение SQL-запроса в JSON. Это не нуждается в jQuery. Я им пользуюсь, и это здорово.

1 голос
/ 26 апреля 2011

Создайте JavaScript-объект из строки, наиболее определенно, но делайте это с помощью законных средств синтаксического анализа JSON, а не "eval ()". Вы могли бы использовать jQuery, но есть и другие решения, такие как инструменты JSON, доступные из json.org , которые являются небольшими и простыми.

Как только это объект JavaScript, тогда ваши потребности должны помочь вам понять, нужно ли какое-то решение для запроса или вместо этого просто вопрос программирования.

0 голосов
/ 08 января 2014

FloatLeft - как указывает Дэн, ваша задача была бы намного проще, если бы вы могли использовать XPath, но нет необходимости переписывать ваши данные в формате XML.С DefiantJS (http://defiantjs.com) вы можете теперь запрашивать структуру JSON с выражениями XPath.

DefiantJS расширяет глобальный объект JSON методом «поиск», который разрешает запросы и возврат XPathмассив с совпадениями (пустой массив, если совпадений не найдено). Возвращенный массив также оснащен агрегатными функциями, одна из этих «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;
0 голосов
/ 27 апреля 2011

Создайте объект из строки JSON с помощью JSON.parse () или jQuery.parseJSON (), если вы уже используете jQuery - или просто передайте его как со стороны сервера как JSON.

Затем вы можете пройтись по объекту, чтобы найти нужную запись.Или вы можете использовать свои объекты для создания данных из них.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...