当前位置: 代码迷 >> JavaScript >> 将重复的JSON名称转换为对象?
  详细解决方案

将重复的JSON名称转换为对象?

热度:27   发布时间:2023-06-13 12:25:55.0

我有以下字符串...

{
    "Qualifications[0].DegreeType": "Degree Type 1",
    "Qualifications[0].Classification": "Clasification 1",
    "Qualifications[0].CourseTitle": "Course Title 1",
    "Qualifications[0].YearOfAward": "2018",
    "Qualifications[0].AwardingInstitution": "Awarding institution 1",
    "Qualifications[1].DegreeType": "Degree Type 2",
    "Qualifications[1].Classification": "Classification 2",
    "Qualifications[1].CourseTitle": "Course Title 2",
    "Qualifications[1].YearOfAward": "2019",
    "Qualifications[1].AwardingInstitution": "Awarding Institution 2",
    ... and so on...
 }

有谁知道将其转换为javascript对象的简单方法,这样我就可以有效地...

$(Qualifications).each(i, v){
    //do stuff on whatever property of Qualifications[i]
}

我能想到的唯一方法是使用字符串操作以及类似下面的内容,但是它需要针对每个属性进行大量自定义代码检查映射,而我正在寻找更通用,更简单的方法。

    let i = 0;
    while (Qualifications[" + i +"].whateverProperty..) {
        //add to object array
        i++;
    }

您可以通过移动给定对象来拆分键并减少路径。

如果不存在任何对象,请使用名称或数组创建一个新属性。 稍后分配值。

 function setValue(object, path, value) { var way = path.replace(/\\[/g, '.').replace(/\\]/g, '').split('.'), last = way.pop(); way.reduce(function (o, k, i, kk) { return o[k] = o[k] || (isFinite(i + 1 in kk ? kk[i + 1] : last) ? [] : {}); }, object)[last] = value; } var object = { "Qualifications[0].DegreeType": "Degree Type 1", "Qualifications[0].Classification": "Clasification 1", "Qualifications[0].CourseTitle": "Course Title 1", "Qualifications[0].YearOfAward": "2018", "Qualifications[0].AwardingInstitution": "Awarding institution 1", "Qualifications[1].DegreeType": "Degree Type 2", "Qualifications[1].Classification": "Classification 2", "Qualifications[1].CourseTitle": "Course Title 2", "Qualifications[1].YearOfAward": "2019", "Qualifications[1].AwardingInstitution": "Awarding Institution 2" }, result = {}; Object.entries(object).forEach(([k, v]) => setValue(result, k, v)); console.log(result); 
 .as-console-wrapper { max-height: 100% !important; top: 0; } 

您可以像这样简单地使用标准的Object.keys

 let qualifications = []
 const my_object = {
    "Qualifications[0].DegreeType": "Degree Type 1",
    "Qualifications[0].Classification": "Clasification 1",
    "Qualifications[0].CourseTitle": "Course Title 1",
    ...
 }


Object.keys(my_object).forEach(key => {
    //to access the index you could then do:
    const idx = Number(key.split('[')[1].split(']')[0])
    const sub_key = key.split('.')[1]
    //not here that i don't verify if the index exists
    if (!qualifications[idx]) qualifications[idx] = {}
    qualifications[idx][sub_key] = my_object[key]
})
  相关解决方案