#jquery #json
#jquery #json
Вопрос:
у меня есть такой json:
{
"page": {
"id": 220,
"parentId": 196,
"property": {
"1": {
"name": "h1",
"value": "value i dont need",
},
"2": {
"name": "tags",
"value": "value i dont need",
},
"3": {
"name": "description",
"value": "value i need",
},
}
Вопрос в том, как я могу получить «нужное мне значение», если идентификатор свойства («3» в моем случае) динамично меняется?
Итак, я не могу просто использовать
data.page.property[3].value
кстати, я использую jquery.
Спасибо!
— отредактировано из-за недопонимания
Комментарии:
1.
data.page.property[your_variable].value
это должно сработать2. если вы имеете в виду, что хотите получить третье свойство (не заботитесь / не уверены в его имени), вы можете использовать
for ... in
цикл в сочетании со счетчиком, если счетчик достигает значения2
(третьего), затем получить доступ к свойству и разорвать цикл.
Ответ №1:
Если это будет случайный объект с какого-либо сервера, тогда вам нужно только повторить объект и сравнить то, что вам нужно,
for(i in data.page.property)
{
if(data.page.property[i].value amp;amp; data.page.property[i].value === "your value")
// do your stuff
}
Ответ №2:
Чтобы получить определенное значение по имени, вы можете использовать такую функцию, как следующая:
function getValue( name ) {
var val = '';
$.each(data.page.property, function(k,v) {
if( v.name == name ) {
val = v.value;
return false;
}
});
return val;
};
console.log( getValue( "description" ) ); //output: value i need
console.log( getValue( "tags" ) ); //output: value i dont need
console.log( getValue( "h1" ) ); //output: value i dont need
Комментарии:
1. я не могу использовать «3», потому что он динамично меняется. это может быть 2 или 5 разных раз.
2. Я обновил свой ответ и вскоре представлю демонстрацию.
3. @Rusher, я посмотрел на ваш обновленный JSON. Как вы решаете, что вам нужно? Это последний или по значению
value i need
? Без разъяснения этого и того факта, что ваши требования постоянно меняются, вы не получите хорошего ответа.4. по имени. я думал, что смогу сделать что-то вроде
data.page.property[@name='description'].value
5. @Rusher, теперь это намного понятнее; имеет смысл. Я скоро обновлю свой ответ.
Ответ №3:
Перебирайте property
-array, пока не найдете value
поле. затем прочитайте его
Комментарии:
1. но у меня много полей «значение». вероятно, мне нужно найти что-то вроде name=description .
2. затем повторяйте, пока не найдете правильное
name
поле3. просто подумал, что
data.page.property[@name='description'].value
в xslt есть что-то подобное.
Ответ №4:
var prop = data.page.property
for(k in prop)
{
if(prop[k].name == 'name you are interested')
var v = prop[k].value || someDefaultValue;
// do something about v
}
Ответ №5:
Только что написал эту общую функцию, которая может принимать любой объект / массив и находить объекты по атрибуту и его значению. Неважно, предоставляете ли вы массив, объект или массив объектов. Независимо от того, насколько глубока структура и т. Д. Он просто просмотрит все и найдет все объекты, у которых есть определенный атрибут, и его значение равно указанному значению. Это то, что я искал, когда нашел этот ответ, так что, надеюсь, кому-то это пойдет на пользу:
function findObjectWithKey(obj, key, value, results) {
if (obj amp;amp; typeof obj === "object" amp;amp; Array.isArray(obj)) {
obj.forEach((_obj) => {
results = findObjectWithKey(_obj, key, value, results);
});
} else if (obj amp;amp; typeof obj === "object" amp;amp; Object.keys(obj)?.length > 0) {
Object.keys(obj).forEach((_objKey) => {
if (_objKey === key amp;amp; obj[_objKey] === value) {
results.push(obj);
}
results = findObjectWithKey(obj[_objKey], key, value, results);
});
}
return results;
}
Использовать:
const foundObjects = findObjectWithKey({some:{structure: false}}, 'structure', false, []);
Возврат: [{"structure":false}]
;
Ответ №6:
Чистый код Javascript
for (var k in json.page.property) {
var o = json.page.property[k];
if (o.value) alert(o.value); //Make sure it only alerts if there is value
}
Ответ №7:
Надеюсь, что нужное вам значение относится к последнему члену объекта свойства,
var len = Object.keys(json.page.property).length;
var myValue =json.page.property[len].value ;
console.log(myValue); // prints "value i need"