我需要开发一个可以转换JSON格式的Javascript函数,如下所示。我不确定是否已经有用于此目的的javascript函数,或者我应该自己开发一个新函数
输入:(示例)
{
"event[id]": "1476258193",
"event[creator]": "aziz",
"event[title]": "event[title]",
"event[review][thankyou]": "event[review][thankyou]",
"event[review][teaser]": "event[review][teaser]"
}
输出应该是这样的:
{
Events: {
Id: “1476258193”,
Creator: “aziz”
…..
Review: {
Thankyou: “”,
Teaser: “”
}
}
}
编辑(解决方案):经过一些工作和其他用户的帮助,特别是“anied”我自己做了这个功能,如果有人对此感兴趣,那么这个功能不是100%最优,但是它做了什么应该做
https://plnkr.co/edit/4d6cDzHXpN3RAOAJD2F0?p=preview
convert = function() {
var obj = {
"event[id]": "1476258193",
"event[creator]": "smista",
"event[title]": "event[title]",
"event[crmid]": "event[crmid]",
"event[responsible]": "event[responsible]",
"event[location]": "event[location]",
"event[ktr]": "event[ktr]",
"event[description]": "event[description]",
"event[targetgroup]": "event[targetgroup]",
"event[learninggoals]": "event[learninggoals]",
"event[status]": "offline",
"event[issuu][html]": "event[issuu][html]",
"event[group_by_threads]": "1",
"event[timeblocks][0][lectures][0][persons][0]": "2",
"event[timeblocks][0][lectures][0][persons][1]": "333333",
"event[timeblocks][0][lectures][0][persons][2]": "3",
"event[timeblocks][0][lectures][1][persons][0]": "44",
"event[timeblocks][0][lectures][1][persons][1]": "444",
"event[timeblocks][0][lectures][1][persons][2]": "4444",
"event[participants]": "event[participants]",
"event[review][thankyou]": "event[review][thankyou]",
"event[review][teaser]": "event[review][teaser]"
}
var result = "Events : {";
var mainKeyString = "" ;
var mainKeys = [] ;
var keysCount = 0 ;
for (var k in obj) {
if( obj.hasOwnProperty(k) ) {
res = k.replace('event[', '');
mainKeyString+= res ;
}
}
mainKeyString = mainKeyString.replace(/\[/g,',');
mainKeyString = mainKeyString.replace(/\]/g,',');
mainKeyString = mainKeyString.replace(/,,/g,',');
mainKeyString = mainKeyString.substring(0, mainKeyString.length-1);
mainKeys = mainKeyString.split(',') ;
for (var i in obj) {
if( obj.hasOwnProperty(i) ) {
keysCount = (i.match(/\[/g) || []).length;
var lastKey = keysCount -1 ;
for (j=0;j<keysCount;j++){
if (keysCount >1 && j != lastKey){
result += mainKeys[0] +": {";
}
else if (keysCount >1 && j == lastKey) {
result += mainKeys[0] +":\""+obj[i] + "\"}";
}
else result += mainKeys[0] +":\""+obj[i] + "\",";
mainKeys.shift() ;
}
}
}
document.getElementById("result").innerHTML = result;
}
答案 0 :(得分:1)
你应该开发一些东西,因为我不知道存在类似的东西。您将需要编写一个递归方法,该方法迭代对象键并将属性添加到新的源对象。但是,一个难点是你还需要处理重复(我看到了一些)。如果您对键的格式有信心(它们只包含用于表示新属性的括号),那么您可以使用for...in
循环(for key in yourobject
编写一些迭代对象中的键的内容。并寻找substr(key.indexOf('['), key.indexOf(']')
来追捕逻辑界限。祝你好运!