Javascript 如何用多个相同的键但不同的值解析这个类似JSON的结构?
我有来自后端的Json结构化数据,当我尝试使用Javascript Json.Parse解析它时,它给我带来了问题。我有多个具有相同密钥的节点,当解析时,它只给出一个节点。下面是JSON结构。我还为相同的创建了JSFIDLE:,您可以复制该结构并在“”中检查它,只需看看JS veal是如何构造的Javascript 如何用多个相同的键但不同的值解析这个类似JSON的结构?,javascript,json,Javascript,Json,我有来自后端的Json结构化数据,当我尝试使用Javascript Json.Parse解析它时,它给我带来了问题。我有多个具有相同密钥的节点,当解析时,它只给出一个节点。下面是JSON结构。我还为相同的创建了JSFIDLE:,您可以复制该结构并在“”中检查它,只需看看JS veal是如何构造的 { "metadata":{ "USER_TYPE":"APPLE LEAD" }, "TODAY":[ { "REPORT_TYPE":"T
{
"metadata":{
"USER_TYPE":"APPLE LEAD"
},
"TODAY":[
{
"REPORT_TYPE":"TODAY",
"VISIT_STATUS":"Audit In Progress",
"VISIT_STATUS_ID":"4",
"VISIT_ID":"V100-5293-2013-11",
"USER_ID":"100124",
"APP_ASSIGNMENT_ID":"3",
"METRIC_ID":"101652",
"PID":"139876",
"INSTANCE_ID":"",
"IS_OFFLINE":"",
"FACILITY_ID":"5293",
"FACILITY_NAME":"ABC",
"CITY":"Singapore",
"STATE_PROVINCE":"Singapore",
"COUNTRY":"Singapore",
"FACILITY_ADDRESS":"ABCSDASDSDSADD",
"FACILITY_LOCAL_NAME":"",
"FACILITY_LOCAL_ADDRESS":"",
"LONGITUDE":"",
"LATITUDE":"",
"VISIT_EDIT_FLAG":"D",
"VS_EDIT_FLAG":"D",
"VS_PID":"139870",
"VS_METRIC_ID":"101661",
"ONSITE_LEAD":"Eve SGM",
"APPLE_LEAD":"Lara SGM",
"APPLE_VERIFICATION_LEAD":"Nina SGM",
"SR_PROGRAM_MANAGER":"Bob SGM",
"START_DATE":"14-NOV-13",
"PROTOCOL_NAME":"Code of Conduct Provision - November Protocol",
"TPA_DATE":"NOV 22,2013",
"FINAL_REPORT_DEADLINE":"NOV 26,2013",
"SHOW_DATE":"NOV 14 - NOV 15,2013",
"AUDIT_COMPANIES":[
{
"AUDIT_COMPANY":"Golder",
"AUDITORS":[
{
"TPA_AUDITOR":"Jake",
"IS_LEAD":"1",
"ASSIGNMENTS":[
{
"ASSIGNMENTS":"Facility"
}
]
},
{
"TPA_AUDITOR":"Jasmi",
"IS_LEAD":"0",
"ASSIGNMENTS":[
{
"ASSIGNMENTS":"Facility"
}
]
}
]
}
]
}
],
"TODAY":[
{
"REPORT_TYPE":"TODAY",
"VISIT_STATUS":"Audit In Progress",
"VISIT_STATUS_ID":"4",
"VISIT_ID":"V98-5293-2013-11",
"USER_ID":"100124",
"APP_ASSIGNMENT_ID":"3",
"METRIC_ID":"101652",
"PID":"139018",
"INSTANCE_ID":"",
"IS_OFFLINE":"",
"FACILITY_ID":"5293",
"FACILITY_NAME":"XYZ",
"CITY":"Singapore",
"STATE_PROVINCE":"Singapore",
"COUNTRY":"Singapore",
"FACILITY_ADDRESS":"",
"FACILITY_LOCAL_NAME":"",
"FACILITY_LOCAL_ADDRESS":"",
"LONGITUDE":"",
"LATITUDE":"",
"VISIT_EDIT_FLAG":"D",
"VS_EDIT_FLAG":"Y",
"VS_PID":"139014",
"VS_METRIC_ID":"101661",
"ONSITE_LEAD":"Eve",
"APPLE_LEAD":"Eve",
"APPLE_VERIFICATION_LEAD":"Nin",
"SR_PROGRAM_MANAGER":"Fanky",
"START_DATE":"14-NOV-13",
"PROTOCOL_NAME":"Protocol test by sreedhar to validate CAP",
"TPA_DATE":"NOV 22,2013",
"FINAL_REPORT_DEADLINE":"NOV 26,2013",
"SHOW_DATE":"NOV 14 - NOV 15,2013",
"AUDIT_COMPANIES":[
{
"AUDIT_COMPANY":"Verite",
"AUDITORS":[
{
"TPA_AUDITOR":"Scott SGM",
"IS_LEAD":"0",
"ASSIGNMENTS":[
{
"ASSIGNMENTS":"Property Protection"
}
]
},
{
"TPA_AUDITOR":"Charles SGM",
"IS_LEAD":"1",
"ASSIGNMENTS":[
{
"ASSIGNMENTS":"Ethics"
}
]
}
]
}
]
}
],
"TODAY":[
{
"REPORT_TYPE":"TODAY",
"VISIT_STATUS":"Audit In Progress",
"VISIT_STATUS_ID":"4",
"VISIT_ID":"V11-5300-2013-11",
"USER_ID":"100124",
"APP_ASSIGNMENT_ID":"3",
"METRIC_ID":"101652",
"PID":"139047",
"INSTANCE_ID":"",
"IS_OFFLINE":"",
"FACILITY_ID":"5300",
"FACILITY_NAME":"CDE",
"CITY":"Downers Grove",
"STATE_PROVINCE":"Illinois",
"COUNTRY":"USA",
"FACILITY_ADDRESS":"5200 Road",
"FACILITY_LOCAL_NAME":"",
"FACILITY_LOCAL_ADDRESS":"",
"LONGITUDE":"",
"LATITUDE":"",
"VISIT_EDIT_FLAG":"D",
"VS_EDIT_FLAG":"Y",
"VS_PID":"139040",
"VS_METRIC_ID":"101661",
"ONSITE_LEAD":"Eve",
"APPLE_LEAD":"Eve",
"APPLE_VERIFICATION_LEAD":"Nina",
"SR_PROGRAM_MANAGER":"Fanky",
"START_DATE":"14-NOV-13",
"PROTOCOL_NAME":"Code of Conduct Provision - November Protocol",
"TPA_DATE":"NOV 22,2013",
"FINAL_REPORT_DEADLINE":"NOV 26,2013",
"SHOW_DATE":"NOV 14 - NOV 15,2013",
"AUDIT_COMPANIES":[
{
"AUDIT_COMPANY":"Golder",
"AUDITORS":[
{
"TPA_AUDITOR":"Jake SGM",
"IS_LEAD":"1",
"ASSIGNMENTS":[
{
"ASSIGNMENTS":"Emergency Prevention, Preparedness and Response"
},
{
"ASSIGNMENTS":"Ethics"
}
]
},
{
"TPA_AUDITOR":"Jasmin SGM",
"IS_LEAD":"0",
"ASSIGNMENTS":[
{
"ASSIGNMENTS":"Labor & Human Rights"
},
{
"ASSIGNMENTS":"Management Systems"
}
]
}
]
},
{
"AUDIT_COMPANY":"Verite",
"AUDITORS":[
{
"TPA_AUDITOR":"Charles SGM",
"IS_LEAD":"1",
"ASSIGNMENTS":[
{
"ASSIGNMENTS":"Emergency Prevention, Preparedness and Response"
}
]
},
{
"TPA_AUDITOR":"David SGM",
"IS_LEAD":"0",
"ASSIGNMENTS":[
{
"ASSIGNMENTS":"Hazardous Substance Management and Restrictions"
},
{
"ASSIGNMENTS":"Hazardous Substance Management and Restrictions 1"
}
]
}
]
}
]
}
],
"TODAY":[
{
"REPORT_TYPE":"TODAY",
"VISIT_STATUS":"Audit In Progress",
"VISIT_STATUS_ID":"4",
"VISIT_ID":"V13-4002-2013-11",
"USER_ID":"100124",
"APP_ASSIGNMENT_ID":"3",
"METRIC_ID":"101652",
"PID":"145748",
"INSTANCE_ID":"",
"IS_OFFLINE":"N",
"FACILITY_ID":"4002",
"FACILITY_NAME":"AAC",
"CITY":"Shenzhen",
"STATE_PROVINCE":"Guangdong",
"COUNTRY":"China",
"FACILITY_ADDRESS":"Dsdiang District",
"FACILITY_LOCAL_NAME":"",
"FACILITY_LOCAL_ADDRESS":"",
"LONGITUDE":"",
"LATITUDE":"",
"VISIT_EDIT_FLAG":"D",
"VS_EDIT_FLAG":"D",
"VS_PID":"145691",
"VS_METRIC_ID":"101661",
"ONSITE_LEAD":"Eve SGM",
"APPLE_LEAD":"Lara SGM",
"APPLE_VERIFICATION_LEAD":"Nina SGM",
"SR_PROGRAM_MANAGER":"Bob SGM",
"START_DATE":"18-NOV-13",
"PROTOCOL_NAME":"Test Protocol 10",
"TPA_DATE":"DEC 06,2013",
"FINAL_REPORT_DEADLINE":"DEC 10,2013",
"SHOW_DATE":"NOV 18 - NOV 30,2013",
"AUDIT_COMPANIES":[
{
"AUDIT_COMPANY":"Golder",
"AUDITORS":[
{
"TPA_AUDITOR":"Jake SGM",
"IS_LEAD":"0",
"ASSIGNMENTS":[
{
"ASSIGNMENTS":"Labor & Human Rights"
},
{
"ASSIGNMENTS":"Wages & Benefits"
}
]
},
{
"TPA_AUDITOR":"Jasmin SGM",
"IS_LEAD":"0",
"ASSIGNMENTS":[
{
"ASSIGNMENTS":"Antidiscrimination"
},
{
"ASSIGNMENTS":"Labor & Human Rights"
}
]
},
{
"TPA_AUDITOR":"Yasmin SGM",
"IS_LEAD":"1",
"ASSIGNMENTS":[
{
"ASSIGNMENTS":"Antidiscrimination"
}
]
}
]
},
{
"AUDIT_COMPANY":"PWC",
"AUDITORS":[
{
"TPA_AUDITOR":"Leo SGM",
"IS_LEAD":"1",
"ASSIGNMENTS":[
{
"ASSIGNMENTS":"Antidiscrimination"
},
{
"ASSIGNMENTS":"Labor & Human Rights"
}
]
},
{
"TPA_AUDITOR":"Maggie SGM",
"IS_LEAD":"0",
"ASSIGNMENTS":[
{
"ASSIGNMENTS":"Labor & Human Rights"
},
{
"ASSIGNMENTS":"Wages & Benefits"
}
]
},
{
"TPA_AUDITOR":"Maria SGM",
"IS_LEAD":"0",
"ASSIGNMENTS":[
{
"ASSIGNMENTS":"Antidiscrimination"
},
{
"ASSIGNMENTS":"Labor & Human Rights"
},
{
"ASSIGNMENTS":"Wages & Benefits"
}
]
}
]
},
{
"AUDIT_COMPANY":"Supplier Responsibility",
"AUDITORS":[
{
"TPA_AUDITOR":"Gia SGM",
"IS_LEAD":"1",
"ASSIGNMENTS":[
{
"ASSIGNMENTS":"Antidiscrimination"
},
{
"ASSIGNMENTS":"Labor & Human Rights"
},
{
"ASSIGNMENTS":"Wages & Benefits"
}
]
},
{
"TPA_AUDITOR":"Ruth SGM",
"IS_LEAD":"0",
"ASSIGNMENTS":[
{
"ASSIGNMENTS":"Antidiscrimination"
},
{
"ASSIGNMENTS":"Labor & Human Rights"
}
]
},
{
"TPA_AUDITOR":"Ryan SGM",
"IS_LEAD":"0",
"ASSIGNMENTS":[
{
"ASSIGNMENTS":"Labor & Human Rights"
},
{
"ASSIGNMENTS":"Wages & Benefits"
}
]
}
]
},
{
"AUDIT_COMPANY":"Verite",
"AUDITORS":[
{
"TPA_AUDITOR":"Charles SGM",
"IS_LEAD":"1",
"ASSIGNMENTS":[
{
"ASSIGNMENTS":"Antidiscrimination"
},
{
"ASSIGNMENTS":"Labor & Human Rights"
}
]
},
{
"TPA_AUDITOR":"David SGM",
"IS_LEAD":"0",
"ASSIGNMENTS":[
{
"ASSIGNMENTS":"Antidiscrimination"
},
{
"ASSIGNMENTS":"Labor & Human Rights"
},
{
"ASSIGNMENTS":"Wages & Benefits"
}
]
},
{
"TPA_AUDITOR":"Scott SGM",
"IS_LEAD":"0",
"ASSIGNMENTS":[
{
"ASSIGNMENTS":"Labor & Human Rights"
},
{
"ASSIGNMENTS":"Wages & Benefits"
}
]
}
]
}
]
}
],
"TODAY":[
{
"REPORT_TYPE":"TODAY",
"VISIT_STATUS":"Audit In Progress",
"VISIT_STATUS_ID":"4",
"VISIT_ID":"V15-5343-2013-11",
"USER_ID":"100124",
"APP_ASSIGNMENT_ID":"3",
"METRIC_ID":"101652",
"PID":"138985",
"INSTANCE_ID":"",
"IS_OFFLINE":"",
"FACILITY_ID":"5343",
"FACILITY_NAME":"Cable",
"CITY":"Shenzhen",
"STATE_PROVINCE":"Guangdong",
"COUNTRY":"China",
"FACILITY_ADDRESS":"No. 1173 Henggang",
"FACILITY_LOCAL_NAME":"",
"FACILITY_LOCAL_ADDRESS":"",
"LONGITUDE":"",
"LATITUDE":"",
"VISIT_EDIT_FLAG":"D",
"VS_EDIT_FLAG":"D",
"VS_PID":"138969",
"VS_METRIC_ID":"101661",
"ONSITE_LEAD":"Eve SGM",
"APPLE_LEAD":"S48 Rao",
"APPLE_VERIFICATION_LEAD":"Nina SGM",
"SR_PROGRAM_MANAGER":"Fanky SGM",
"START_DATE":"14-NOV-13",
"PROTOCOL_NAME":"Protocol by sreedhar test",
"TPA_DATE":"NOV 14,2013",
"FINAL_REPORT_DEADLINE":"NOV 15,2013",
"SHOW_DATE":"NOV 14 - NOV 14,2013",
"AUDIT_COMPANIES":[
{
"AUDIT_COMPANY":"PWC",
"AUDITORS":[
{
"TPA_AUDITOR":"Leo SGM",
"IS_LEAD":"1",
"ASSIGNMENTS":[
{
"ASSIGNMENTS":"Facility"
}
]
}
]
}
]
}
],
"TODAY":[
{
"REPORT_TYPE":"TODAY",
"VISIT_STATUS":"Audit In Progress",
"VISIT_STATUS_ID":"4",
"VISIT_ID":"V8-5342-2013-11",
"USER_ID":"100124",
"APP_ASSIGNMENT_ID":"3",
"METRIC_ID":"101652",
"PID":"140688",
"INSTANCE_ID":"",
"IS_OFFLINE":"N",
"FACILITY_ID":"5342",
"FACILITY_NAME":"Vitalo Packaging Co. Ltd.",
"CITY":"Suzhou",
"STATE_PROVINCE":"Jiangsu",
"COUNTRY":"China",
"FACILITY_ADDRESS":"Suzhou",
"FACILITY_LOCAL_NAME":"",
"FACILITY_LOCAL_ADDRESS":"",
"LONGITUDE":"",
"LATITUDE":"",
"VISIT_EDIT_FLAG":"D",
"VS_EDIT_FLAG":"D",
"VS_PID":"140684",
"VS_METRIC_ID":"101661",
"ONSITE_LEAD":"Eve SGM",
"APPLE_LEAD":"Lara SGM",
"APPLE_VERIFICATION_LEAD":"Nina SGM",
"SR_PROGRAM_MANAGER":"Tom SGM",
"START_DATE":"15-NOV-13",
"PROTOCOL_NAME":"Code of Conduct Provision - November Protocol",
"TPA_DATE":"NOV 22,2013",
"FINAL_REPORT_DEADLINE":"NOV 26,2013",
"SHOW_DATE":"NOV 15 - NOV 16,2013",
"AUDIT_COMPANIES":[
{
"AUDIT_COMPANY":"Golder",
"AUDITORS":[
{
"TPA_AUDITOR":"Yasmin SGM",
"IS_LEAD":"0",
"ASSIGNMENTS":[
{
"ASSIGNMENTS":"Facility"
}
]
},
{
"TPA_AUDITOR":"Jasmin SGM",
"IS_LEAD":"1",
"ASSIGNMENTS":[
{
"ASSIGNMENTS":""
}
]
}
]
}
]
}
],
"UPCOMING":[
{
"REPORT_TYPE":"UPCOMING",
"VISIT_STATUS":"Pre-Audit - Audit Planned",
"VISIT_STATUS_ID":"1",
"VISIT_ID":"V5-5349-2013-11",
"USER_ID":"100124",
"APP_ASSIGNMENT_ID":"3",
"METRIC_ID":"101652",
"PID":"145848",
"INSTANCE_ID":"",
"IS_OFFLINE":"N",
"FACILITY_ID":"5349",
"FACILITY_NAME":"Advanced Inc.",
"CITY":"Kaohsiung",
"STATE_PROVINCE":"Kaohsiung",
"COUNTRY":"Taiwan",
"FACILITY_ADDRESS":"No.18 North6",
"FACILITY_LOCAL_NAME":"",
"FACILITY_LOCAL_ADDRESS":"",
"LONGITUDE":"",
"LATITUDE":"",
"VISIT_EDIT_FLAG":"D",
"VS_EDIT_FLAG":"Y",
"VS_PID":"145840",
"VS_METRIC_ID":"101661",
"ONSITE_LEAD":"Eve SGM",
"APPLE_LEAD":"Eve SGM",
"APPLE_VERIFICATION_LEAD":"Nina SGM",
"SR_PROGRAM_MANAGER":"Bob SGM",
"START_DATE":"20-NOV-13",
"PROTOCOL_NAME":"Test Protocol 10",
"TPA_DATE":"NOV 29,2013",
"FINAL_REPORT_DEADLINE":"DEC 03,2013",
"SHOW_DATE":"NOV 20 - NOV 22,2013",
"AUDIT_COMPANIES":[
{
"AUDIT_COMPANY":"Golder",
"AUDITORS":[
{
"TPA_AUDITOR":"Jasmin SGM",
"IS_LEAD":"1",
"ASSIGNMENTS":[
{
"ASSIGNMENTS":"Labor & Human Rights"
}
]
},
{
"TPA_AUDITOR":"Jake SGM",
"IS_LEAD":"0",
"ASSIGNMENTS":[
{
"ASSIGNMENTS":"Wages & Benefits"
},
{
"ASSIGNMENTS":"Antidiscrimination"
}
]
}
]
}
]
}
],
"UPCOMING":[
{
"REPORT_TYPE":"UPCOMING",
"VISIT_STATUS":"Pre-Audit - Audit Planned",
"VISIT_STATUS_ID":"1",
"VISIT_ID":"V280-5287-2013-11",
"USER_ID":"100124",
"APP_ASSIGNMENT_ID":"3",
"METRIC_ID":"101652",
"PID":"139688",
"INSTANCE_ID":"",
"IS_OFFLINE":"",
"FACILITY_ID":"5287",
"FACILITY_NAME":"Uniparts",
"CITY":"Lutterworth",
"STATE_PROVINCE":"Lutterworth",
"COUNTRY":"United Kingdom",
"FACILITY_ADDRESS":"Magna Park",
"FACILITY_LOCAL_NAME":"",
"FACILITY_LOCAL_ADDRESS":"",
"LONGITUDE":"",
"LATITUDE":"",
"VISIT_EDIT_FLAG":"D",
"VS_EDIT_FLAG":"D",
"VS_PID":"139683",
"VS_METRIC_ID":"101661",
"ONSITE_LEAD":"Eve SGM",
"APPLE_LEAD":"Lara SGM",
"APPLE_VERIFICATION_LEAD":"Nina SGM",
"SR_PROGRAM_MANAGER":"Fanky SGM",
"START_DATE":"15-NOV-13",
"PROTOCOL_NAME":"Test Protocol 10",
"TPA_DATE":"NOV 22,2013",
"FINAL_REPORT_DEADLINE":"NOV 26,2013",
"SHOW_DATE":"NOV 15 - NOV 15,2013",
"AUDIT_COMPANIES":[
{
"AUDIT_COMPANY":"Golder",
"AUDITORS":[
{
"TPA_AUDITOR":"Jasmin SGM",
"IS_LEAD":"0",
"ASSIGNMENTS":[
{
"ASSIGNMENTS":"Antidiscrimination"
}
]
},
{
"TPA_AUDITOR":"Jake SGM",
"IS_LEAD":"1",
"ASSIGNMENTS":[
{
"ASSIGNMENTS":""
}
]
}
]
}
]
}
]
}
json上不可能有“具有相同密钥的多个节点”,这应该是一个数组。 在解析之前,需要进行某种数据转换 查看您的数据,您的“今日”节点都是一个元素的数组,如果您能够将其转换为一个包含所有元素的数组,则应该可以解决您的问题。。。 如果您知道每个重复键是什么,并且它们与子数据结构中使用的其他键是唯一的,那么可以在解析之前使用正则表达式对它们进行修改 下面的正则表达式依赖于这样一个事实,即您的键将在结束引号(
“
)和完整冒号(:
)之间没有空格-为简单起见。如果不是这样,则可以升级它以处理导致问题的任何情况
这样,您至少可以从客户端获取所有数据,然后可以单步执行每个项目,去掉添加的\u 1
、\u 2
等,然后将其他内容保存到您自己的数组中
如果这些键确实出现在数据集中较低的位置,您会发现它们也被替换了,但在使用数据时,这将是一件容易检测和修复的事情。我认为在同一级别上,您不可能有两个同名属性,因为在从JSON解析为实际JS时,其中一个属性将覆盖另一个属性object@BeNdErR是否有任何方法可以阻止它重写?您应该更改属性名称,或者按照Drax的建议,将其更改为数组。如何更改属性名称?或者将其转换为数组?任何示例。?是否有任何方法可以删除密钥本身,例如:“TODAY?”“.我有办法吗?cos后端代码我现在无法更改。不管它是什么,我都必须在前端做。我如何才能将它转换为一个数组,非常抱歉fa窃听,但我对javascript没有太多的知识。您需要手动修改字符串,使其符合您的需要,不管它们是什么。或者您可以找到一个库,该库可以自动解析json并将多个键折叠为一个数组。@user2798628~不用担心:)试图修复客户端错误的服务器端输出总是一个技巧。。。但有时你别无选择;如果答案有用,别忘了接受。
/// load the JSON string into data, shortened example used below
var data = '{ "TODAY": [], "TODAY": [], "UPCOMING": [] }',
keys = ['TODAY', 'UPCOMING'], /// set your keys here
rexp = new RegExp('"(' + keys.join('|') + ')(?=":)', 'g'),
seen = {};
data = data.replace(rexp, function(match){
if ( seen[match] ) {
return match + '_' + (seen[match]++);
}
else {
seen[match] = 1;
return match;
}
});
console.log(data);
/// { "TODAY": [], "TODAY_1": [], "UPCOMING": []}