2010-10-18 3 views
1

Мой объект JSON строится так:Использование JQuery для обработки объекта JSON

var Source = 
{ 
    Object: [ //Array 
     {Title: 'Test', Type: 'Pet', Category: 'Cat', Description: 'Fluffy', Count: 2 } 
    ] 
}; 

Я был в состоянии понять, как правильно добавить в массив «Object», но я не могу понять из синтаксиса jQuery для запроса объекта на основе списка свойств (Title, Type, Category и т. д.).

Я поместил некоторый тестовый код в событие щелчка и обычно проверяю длину объекта Source.Object (тестовые данные приводят к 2 объектам), чтобы подтвердить, что есть данные для работы (он заполнен вызовом ajax).

function clickTest(category, type) { 
    $(Source).find('Object[Category=\"' + category + '\"]').each(function() { 
     alert($(this).attr('Category')); //doesn't work 
    }); 
} 

Каков правильный способ запроса объекта JSON?

+8

Должен сказать, wtf? – jAndy

+0

Во-вторых, @jAndy O.o – jwueller

+0

Извините, что я сделал здесь неправильно? –

ответ

7

JSON является родным для JavaScript и может циклироваться без использования библиотек (jQuery). [] представляют собой массивы, и {} представляют собой объекты, поэтому:

var obj = Source.Object; 
for (var i = 0, len = obj.length; i < len; i++) { 
    if (obj[i].Category == category) 
     alert(obj[i].Category + ' ' + obj[i].Title); 
} 

И это быстрее, тоже! Хорошая вещь.

+0

Я всегда считал, что jQuery будет быстрее, чем создание цикла javascript для выполнения этих проверок. –

+1

@ C Bauer: jQuery будет короче. Чистый JavaScript будет быстрее (поскольку закрытие вызывает переменные из другой области видимости и т. Д.) В конце концов, jQuery написан на JavaScript - вызов не всегда будет бить пользовательское решение. –

5

Источник - объект JSON, а не HTML DOM. Таким образом, вы должны использовать вспомогательные функции JQuery для массивов:

$.grep(Source.Object, function(e) { return e.Category == category }).each(...) 
+3

«must» звучит довольно экстремально, нет? :) –

+0

+1 - редкое (в основном) правильное использование '$ .grep()', '.each()' после этого взорвется, хотя оно должно быть завернуто в '$ .each (...) ', так как' .grep() 'возвращает массив. –

+1

Я бы исправился: «вы _can_ используете функции утилиты jQuery» - они не нужны, так как это просто обычный JavaScript. –

1

JSon способ транскрибирования объектов JavaScript в формате строки и передать его на проволоке. Одна приятная вещь в этом формате заключается в том, что он непосредственно читается javascript, поэтому ваш объект Source уже готов к обработке.

function processSource(source, category) 
{ 
    var counter = 0; 
    for (counter = 0; counter < source.Object.length; counter += 1) 
    { 
     if (category === source.Object[counter].category) { 
      // do something 
     } 
    } 
} 
Смежные вопросы