使用Javascript解析JSON文件
我正在导入一个嵌套的JSON文件,希望能够将从JSON文件提取的数据显示为一个表 我如何浏览这个JSON文件的不同级别,并能够显示我需要的特定数据(例如,我只想显示最内部的数据) 此外,如何访问键上有空格的节点的子节点 下面是一个示例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": {
{
"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)代码>