使用Javascript解析JSON文件

使用Javascript解析JSON文件,javascript,node.js,json,vue.js,Javascript,Node.js,Json,Vue.js,我正在导入一个嵌套的JSON文件,希望能够将从JSON文件提取的数据显示为一个表 我如何浏览这个JSON文件的不同级别,并能够显示我需要的特定数据(例如,我只想显示最内部的数据) 此外,如何访问键上有空格的节点的子节点 下面是一个示例JSON文件: { "1234567ABCD123": [{ "1111": { "File 1 Data Goes Here": { "AA": {

我正在导入一个嵌套的JSON文件,希望能够将从JSON文件提取的数据显示为一个表

我如何浏览这个JSON文件的不同级别,并能够显示我需要的特定数据(例如,我只想显示最内部的数据)

此外,如何访问键上有空格的节点的子节点

下面是一个示例JSON文件:

{
    "1234567ABCD123": [{
            "1111": {
                "File 1 Data Goes Here": {
                    "AA": {
                        "Some more data": {
                            "AAAA": [{
                                    "Data List": {
                                        "01": {
                                            "File Name": {
                                                "FN": "Hello"
                                            },
                                            "Author": {
                                                "A1": "John Doe"
                                            }
                                        }
                                    }
                                }
                            ]
                        }
                    }
                }
            }
        }
    ],
    "7654321ABCD321": [{
            "2222": {
                "File 2 Data Goes Here": {
                    "BB": {
                        "Data List": {
                            "File Name": "Hello Again"
                        }
                    }
                }
            }
        }, {
            "3333": {
                "File 3 Data Goes Here": {
                    "CC": {
                        "Data List1": {
                            "File Name": "Hello Again 2"
                        },
                        "Data List2": {
                            "File Name": "Hello Again 3"
                        },
                        "Data List3": {
                            "File Name": "Hello Again 4"
                        }
                    }
                }
            }
        }
    ]
}
下面是我的vue方法片段:

    changeViaUpload(ev) {
      const file = ev.target.files[0];
      const reader = new FileReader();
      var vm = this;

      reader.onload = function(e) {
        vm.msg = "[" + e.target.result + "]";
        vm.show = true;

        vm.parsedJson = JSON.parse(vm.msg);

        console.log(vm.parsedJson);

        vm.parsedJson.forEach(function(item) {
          console.log("Outermost Data: " + item["1234567ABCD123"]);
        });
      };
      reader.readAsText(file);
    }
CodeSanboxLink:


谢谢

您不需要从JSON创建任意数组,而是可以循环对象的键

此外,如果要使用空格访问键,只需使用数组键语法,下面是一个嵌套很深的示例:

const json = e.target.result
json['1234567ABCD123'][0]['1111']['File 1 Data Goes Here']['AA']['Some more data']['AAAA'][0]['Data List']["01"]['File Name']['FN']
下面是您的循环示例:

Object.keys(json).forEach((key) => {
  json[key].forEach((el) => {
    Object.keys(el).forEach((inner) => {
      Object.keys(el[inner]).forEach((descriptor) => {
        console.log(el[inner][descriptor])
      })
    })
  })
})

vue部分不确定,但我创建了一个示例,可以帮助您了解如何访问键上有空格的节点的子节点。以下是一个例子:

让jsonData={
“1234567ABCD123”:[{
"1111": {
“文件1数据在此显示”:{
“AA”:{
“更多数据”:{
“AAAA”:[{
“数据列表”:{
"01": {
“文件名”:{
“FN”:“你好”
},
“作者”:{
“A1”:“约翰·多伊”
}
}
}
}
]
}
}
}
}
}
],
“7654321ABCD321”:[{
"2222": {
“文件2数据在此显示”:{
“BB”:{
“数据列表”:{
“文件名”:“你好”
}
}
}
}
}, {
"3333": {
“文件3数据在此显示”:{
“抄送”:{
“数据列表1”:{
“文件名”:“你好,再次2”
},
“数据列表2”:{
“文件名”:“再次问候3”
},
“数据列表3”:{
“文件名”:“再次问候4”
}
}
}
}
}
]
}

console.log(jsonData['1234567ABCD123'][0]['1111']['File 1 Data Goes Here']['AA']['Some more Data']['AAAA'][0]['Data List']['01']['File Name'])
我不太确定问题出在哪里,但如果需要帮助循环一个JSON并将所有数据(比如说,向下两级)提取到一个新的JSON中,然后,您可以使用
for…in
循环通过一个JSON,或者执行
Object.entries(JSON).forEach
,然后将结果存储在一个新的JSON中

例如,如果您想提取2层的所有数据并将其放入新的JSON中,请执行以下操作(假设已解析的JSON位于名为“parsed”的变量中):

var解析={
“1234567ABCD123”:[{
"1111": {
“文件1数据在此显示”:{
“AA”:{
“更多数据”:{
“AAAA”:[{
“数据列表”:{
"01": {
“文件名”:{
“FN”:“你好”
},
“作者”:{
“A1”:“约翰·多伊”
}
}
}
}
]
}
}
}
}
}
],
“7654321ABCD321”:[{
"2222": {
“文件2数据在此显示”:{
“BB”:{
“数据列表”:{
“文件名”:“你好”
}
}
}
}
}, {
"3333": {
“文件3数据在此显示”:{
“抄送”:{
“数据列表1”:{
“文件名”:“你好,再次2”
},
“数据列表2”:{
“文件名”:“再次问候3”
},
“数据列表3”:{
“文件名”:“再次问候4”
}
}
}
}
}
]
},
newP={};
for(已解析的变量k){
if(已解析[k].forEach){
已解析[k]。forEach(x=>{
用于(x中的变量kk){
for(x[kk]中的变量okk){
newP[okk]=x[kk][okk];
}
}
});
}
}
log(“您的第二级数据是:”,newP)