Как да намерите член на JSON обект въз основа на стойност на низ

Така че нека приемем, че имам JSON файл като такъв:

{ "store": {
"book": [ 
  { "category": "reference",
    "author": "Nigel Rees",
    "title": "Sayings of the Century",
    "price": 8.95
  },
  { "category": "fiction",
    "author": "Evelyn Waugh",
    "title": "Sword of Honour",
    "price": 12.99
  },
  { "category": "fiction",
    "author": "Herman Melville",
    "title": "Moby Dick",
    "isbn": "0-553-21311-3",
    "price": 8.99
  },
  { "category": "fiction",
    "author": "J. R. R. Tolkien",
    "title": "The Lord of the Rings",
    "isbn": "0-395-19395-8",
    "price": 22.99
  }
    ]
  }
}

Това, което искам да направя, е да взема член на "книга" и всички негови двойки низови стойности, където заглавието е "Меч на честта". Как мога да направя това с JQuery? Проблемът е, че не знам идентификатора на индекса на члена, ако го знаех, щеше да е тривиално, т.е. store.book[1].XXX ще ми даде стойността на всички двойки стойности на родствени ключове, които търся за.

Някакви идеи как мога да направя това с минимален код?


person 0pt1m1z3    schedule 19.08.2012    source източник
comment
това не е json. това е чист js обект. Json е текстово представяне.   -  person Royi Namir    schedule 20.08.2012
comment
@RoyiNamir всъщност това е легален JSON - подсказката са кавичките около клавишите. Подозирам обаче, че OP не трябва да знае как да декодира JSON.   -  person Alnitak    schedule 20.08.2012
comment
@Alnitak Json е текстово представяне. '{"a":3}' не {"a":3}   -  person Royi Namir    schedule 20.08.2012
comment
Всъщност аз съм просто .ajax с jsonp като тип данни. Така че е декодиран JSON към моя JS код. Просто исках да включа текстово представяне на това, с което имах работа, за да изясня въпроса си.   -  person 0pt1m1z3    schedule 20.08.2012
comment
@RoyiNamir не, тялото на JSON, изпратено през HTTP, не изисква тези ограждащи кавички. Имате нужда от тях само ако пишете JSON като низов литерал.   -  person Alnitak    schedule 20.08.2012
comment
@RoyiNamir кодът по-горе е напълно валиден JSON. Или ви предлагам да редактирате статията в JSON на Уикипедия.   -  person 0pt1m1z3    schedule 20.08.2012
comment
@RoyiNamir с цялото ми уважение, не, не греша. Необработен JSON низ няма около себе си кавички. Литерал на JS низ (който може случайно да съдържа JSON) прави.   -  person Alnitak    schedule 20.08.2012
comment
@Алнитак лошото ми. (мое недоразумение) съжалявам.   -  person Royi Namir    schedule 20.08.2012


Отговори (2)


Използване на масив filter:

var matches = store.book.filter(function(val, index, array) {
    return val.title === 'Sword of Honour';
});

Резултатът ще бъде масив от всички book елементи, които съответстват на предиката на филтъра.

NB: това е метод ES5. Има подложка на свързаната страница на MDN за браузъри, които не са ES5.

person Alnitak    schedule 19.08.2012
comment
къде е json конверторът? - person Royi Namir; 20.08.2012
comment
@RoyiNamir какъв JSON конвертор? OP очевидно вече е декодирала JSON. - person Alnitak; 20.08.2012
comment
Не го разбрах, сякаш той вече го е направил (и все още мисля, че не го е направил) - person Royi Namir; 20.08.2012
comment
благодаря Това проработи. Но успях да променя кода си, за да взема просто стойността на индекса на масива за всеки елемент вместо заглавието и да го използвам. Това ще бъде полезно в случаите, когато е невъзможно да се получи индексният номер. - person 0pt1m1z3; 20.08.2012
comment
За да получите други стойности console.log(matches[0].category); console.log(съвпадения[0].author); console.log(съответства [0].цена); - person Danish Adeel; 05.02.2017

person    schedule
comment
хей, актуализирах отговора. той ще върне съответстващата книга от магазина - person Ashirvad; 20.08.2012