Javascript 用JS解析JSON嵌套数组

Javascript 用JS解析JSON嵌套数组,javascript,json,Javascript,Json,我已经用类似的JSON讨论了各种主题,但从来都不是相同的,我仍然在努力循环数组的元素 我有以下JSON: { "person": [ { "id": "xyz", "attributes": [ {"attribute_name1": "value1"}, {"attribute_name2": "value2"}

我已经用类似的JSON讨论了各种主题,但从来都不是相同的,我仍然在努力循环数组的元素

我有以下JSON:

     {
     "person": 
     [
        {
            "id": "xyz",
            "attributes": 
            [
            {"attribute_name1": "value1"},
            {"attribute_name2": "value2"}
            ]
        },
        {
            "id": "abc1",
            "attributes": 
            [
            {"attribute_name1": "value3"},
            {"attribute_name2": "value4"},
{"attribute_name3": "value77"}
            ]
        }
    ]
}
JSON预先作为字符串传递。 然后我尝试列出所有“人员”及其ID和属性列表:

var data = '{"person":[ { "id": "xyz","attributes": [{"attribute_name1": "value1"},{"attribute_name2": "value2"}]},{"id": "abc1","attributes": [{"attribute_name1": "value3"},{"attribute_name2": "value4"},{"attribute_name3": "value77"}]}]}';

var json, i, j;
var json = data.toString();

json = JSON.parse(json);

for (i in json.person) {
  for (j in json.person[i].attributes) {
    var attribute_name = Object.keys(json.person[i].attributes[j]); // here because I won't know what are the actual names of those attributes
    console.log("Person's ID: " +json.person[i].id + " /// Person's Attribute name: " +attribute_name + " /// Person's Value: " +json.person[i].attributes[j]['attribute_name']);
    console.log("Person's Value: " +json.person[i].attributes[j]['attribute_name']); // this gives undefined
    console.log("Person's Value: " +json.person[i].attributes[j].attribute_name);    // this also gives undefined
  }
}

我很高兴改变JSON的结构,如果这对我有帮助的话。如果这些属性的名称不是“固定”的,那么有没有关于如何获取这些属性名称的值的提示?

也许这会有所帮助。更改JSON结构

var person=[{id:1,名字:'John'},{id:2,名字:'Mary'}];
变量属性=[
{person_id:1,name:'attr_name',value:'val1'},
{person_id:2,name:'attr_name2',value:'val2'}
];
//变式1
for(让属性属性属性属性){
如果(attr.person_id==targetPersonId){…}
}
//变式2

attributes.map(el=>el.person\u id==targetPersonId).forEach(…做点什么)
也许这会有所帮助。更改JSON结构

var person=[{id:1,名字:'John'},{id:2,名字:'Mary'}];
变量属性=[
{person_id:1,name:'attr_name',value:'val1'},
{person_id:2,name:'attr_name2',value:'val2'}
];
//变式1
for(让属性属性属性属性){
如果(attr.person_id==targetPersonId){…}
}
//变式2

attributes.map(el=>el.person\u id==targetPersonId).forEach(…做点什么)
您可以在现有JSON结构中使用此代码段

const data = '{"person":[ { "id": "xyz","attributes": [{"attribute_name1": "value1"},{"attribute_name2": "value2"}]},{"id": "abc1","attributes": [{"attribute_name1": "value3"},{"attribute_name2": "value4"},{"attribute_name3": "value77"}]}]}';

const json = JSON.parse(data);

json.person.forEach((person) => {
  person.attributes.forEach((attribute) => {
    const properties = Object.keys(attribute);
    console.log(`Person's ID:`, person.id);
    properties.forEach((prop) => {
      console.log(`${prop} ${attribute[prop]}`);
    });
  });
});

您可以将此代码段与现有的JSON结构一起使用

const data = '{"person":[ { "id": "xyz","attributes": [{"attribute_name1": "value1"},{"attribute_name2": "value2"}]},{"id": "abc1","attributes": [{"attribute_name1": "value3"},{"attribute_name2": "value4"},{"attribute_name3": "value77"}]}]}';

const json = JSON.parse(data);

json.person.forEach((person) => {
  person.attributes.forEach((attribute) => {
    const properties = Object.keys(attribute);
    console.log(`Person's ID:`, person.id);
    properties.forEach((prop) => {
      console.log(`${prop} ${attribute[prop]}`);
    });
  });
});

json.person[i].attributes[j]['attribute\u name']
中删除单引号,即
json.person[i].attributes[j][attribute\u name]

var data = '{"person":[ { "id": "xyz","attributes": [{"attribute_name1": "value1"},{"attribute_name2": "value2"}]},{"id": "abc1","attributes": [{"attribute_name1": "value3"},{"attribute_name2": "value4"},{"attribute_name3": "value77"}]}]}';
var json, i, j;

json = JSON.parse(data);
for (i in json.person) {
  for (j in json.person[i].attributes) {
    var attribute_name = Object.keys(json.person[i].attributes[j]);
    console.log("Person's ID: " +json.person[i].id + " /// Person's Attribute name: " + attribute_name + " /// Person's Value: " +json.person[i].attributes[j][attribute_name]);
    console.log("Person's Value: " +json.person[i].attributes[j][attribute_name]);
  }
}

json.person[i].attributes[j]['attribute\u name']
中删除单引号,即
json.person[i].attributes[j][attribute\u name]

var data = '{"person":[ { "id": "xyz","attributes": [{"attribute_name1": "value1"},{"attribute_name2": "value2"}]},{"id": "abc1","attributes": [{"attribute_name1": "value3"},{"attribute_name2": "value4"},{"attribute_name3": "value77"}]}]}';
var json, i, j;

json = JSON.parse(data);
for (i in json.person) {
  for (j in json.person[i].attributes) {
    var attribute_name = Object.keys(json.person[i].attributes[j]);
    console.log("Person's ID: " +json.person[i].id + " /// Person's Attribute name: " + attribute_name + " /// Person's Value: " +json.person[i].attributes[j][attribute_name]);
    console.log("Person's Value: " +json.person[i].attributes[j][attribute_name]);
  }
}

如果您想从json中获取具有名称/值的对象,可以尝试这样做

var object = {
     "person": 
     [
        {
            "id": "xyz",
            "attributes": 
            [
            {"attribute_name1": "value1"},
            {"attribute_name2": "value2"}
            ]
        },
        {
            "id": "abc1",
            "attributes": 
            [
            {"attribute_name1": "value3"},
            {"attribute_name2": "value4"},
            {"attribute_name3": "value77"}
            ]
        }
    ]
}



var someobj = {};

function generate(obj) {
    Object.keys(obj).forEach(key => {
        if (key !== 'key' && key !== 'value') {
            obj[key].forEach(element => {
                someobj[element.id] = element.attributes;
                return someobj;
            });
        }
    })
}

如果您想从json中获取具有名称/值的对象,可以尝试这样做

var object = {
     "person": 
     [
        {
            "id": "xyz",
            "attributes": 
            [
            {"attribute_name1": "value1"},
            {"attribute_name2": "value2"}
            ]
        },
        {
            "id": "abc1",
            "attributes": 
            [
            {"attribute_name1": "value3"},
            {"attribute_name2": "value4"},
            {"attribute_name3": "value77"}
            ]
        }
    ]
}



var someobj = {};

function generate(obj) {
    Object.keys(obj).forEach(key => {
        if (key !== 'key' && key !== 'value') {
            obj[key].forEach(element => {
                someobj[element.id] = element.attributes;
                return someobj;
            });
        }
    })
}

风险值数据={
人:[{
id:“xyz”,属性:[{attribute_name1:“value1”},
{attribute_name2:“value2”}]
},
{
id:“abc1”,属性:[{attribute_name1:“value3”},
{attribute_name2:“value4”},{attribute_name3:“value77”}]
}]
};
var-json,i,j;
//var json=data.toString();
//json=json.parse(json);
对于(i在data.person中){
console.log(“人员ID:+data.Person[i].ID”);
对于(data.person[i].attributes中的j){
var attribute_name=Object.keys(data.person[i].attributes[j])[0];//此处,因为我不知道这些属性的实际名称
console.log(“Person's Value:+attribute_name+”->“+data.Person[i].attributes[j][attribute_name]);//这给出了未定义的
}
}

风险值数据={
人:[{
id:“xyz”,属性:[{attribute_name1:“value1”},
{attribute_name2:“value2”}]
},
{
id:“abc1”,属性:[{attribute_name1:“value3”},
{attribute_name2:“value4”},{attribute_name3:“value77”}]
}]
};
var-json,i,j;
//var json=data.toString();
//json=json.parse(json);
对于(i在data.person中){
console.log(“人员ID:+data.Person[i].ID”);
对于(data.person[i].attributes中的j){
var attribute_name=Object.keys(data.person[i].attributes[j])[0];//此处,因为我不知道这些属性的实际名称
console.log(“Person's Value:+attribute_name+”->“+data.Person[i].attributes[j][attribute_name]);//这给出了未定义的
}
}

你能解释一下实际需要什么吗?如前所述,我想用ID和属性逐行列出所有人。你能解释一下实际需要什么吗?如前所述,我想用ID和属性逐行列出所有人,但我不能真正拆分它,它必须是一个包含JSON代码的文本字符串谢谢,但是我不能真正拆分它,它必须是一个包含JSON代码的文本字符串谢谢,但是我很难理解这里的简短语法,并且不确定${prop}位是什么。这些是字符串文字,您可以在上阅读更多关于它们的内容。我们正在使用
forEach
遍历
properties
,而
prop
是当前元素。谢谢,不过我很难理解这里的简短语法,也不确定${prop}位是什么。这些是字符串文字,您可以在上阅读更多关于它们的内容。我们正在使用
forEach
遍历
properties
,并且
prop
是当前元素。谢谢,尝试了,但是得到了“无效XML名称”错误,考虑到这与此无关,这很奇怪XML@Valverde你能再解释一下吗?编译代码时会抛出一个“无效XML名称”错误谢谢,尝试过了,但是出现了“无效XML名称”错误,考虑到这与此无关,这很奇怪XML@Valverde您能再解释一下吗?编译代码时会抛出一个“无效XML名称”错误