Javascript 更改JSON对象格式函数
我需要开发一个Javascript函数,可以如下转换JSON格式。我不确定是否已经有一个javascript函数用于此目的,或者我应该自己开发一个新函数 输入:(示例) 输出应该是这样的:Javascript 更改JSON对象格式函数,javascript,json,Javascript,Json,我需要开发一个Javascript函数,可以如下转换JSON格式。我不确定是否已经有一个javascript函数用于此目的,或者我应该自己开发一个新函数 输入:(示例) 输出应该是这样的: { Events: { Id: “1476258193”, Creator: “aziz” ….. Review: { Thankyou: “”,
{
Events: {
Id: “1476258193”,
Creator: “aziz”
…..
Review: {
Thankyou: “”,
Teaser: “”
}
}
}
编辑(解决方案):经过一些工作和其他用户的帮助,特别是“anied”,我自己做了这个功能,如果有人感兴趣这里是一个与答案,该功能不是100%最优,但它做什么应该做
convert=function(){
var obj={
“事件[id]:“1476258193”,
“事件[创建者]:“微笑”,
“事件[标题]:“事件[标题]”,
“事件[crmid]:“事件[crmid]”,
“事件[责任]”:“事件[责任]”,
“事件[位置]:“事件[位置]”,
“事件[ktr]”:“事件[ktr]”,
“事件[描述]”:“事件[描述]”,
“事件[targetgroup]:“事件[targetgroup]”,
“事件[learninggoals]:“事件[learninggoals]”,
“事件[状态]:“脱机”,
“事件[issu][html]:“事件[issu][html]”,
“事件[按线程分组]:“1”,
“活动[时间段][0][讲座][0][人][0]:“2”,
“活动[时间段][0][讲座][0][人][1]:“333333”,
“活动[时间段][0][讲座][0][人][2]:“3”,
“活动[时间段][0][讲座][1][人][0]:“44”,
“活动[时间段][0][讲座][1][人][1]:“444”,
“活动[时间段][0][讲座][1][人][2]:“4444”,
“事件[参与者]”:“事件[参与者]”,
“活动[回顾][谢谢]:“活动[回顾][谢谢]”,
“事件[回顾][摘要]:“事件[回顾][摘要]”
}
var result=“事件:{”;
var mainkystring=“”;
var mainKeys=[];
var-keysCount=0;
用于(obj中的var k){
if(对象hasOwnProperty(k)){
res=k.replace('事件[','');
mainKeyString+=res;
}
}
mainKeyString=mainKeyString.replace(/\[/g',,');
mainKeyString=mainKeyString.replace(/\]/g',,');
mainKeyString=mainKeyString.replace(/,/g,,,);
mainKeyString=mainKeyString.substring(0,mainKeyString.length-1);
mainKeys=mainKeyString.split(',');
用于(obj中的var i){
if(对象为自有财产(i)){
keysCount=(i.match(/\[/g)| |[])长度;
var lastKey=keysCount-1;
对于(j=0;j1&&j!=lastKey){
结果+=主键[0]+“:{”;
}
else if(keysCount>1&&j==lastKey){
结果+=主键[0]+“:\”“+obj[i]+“\”}”;
}
else result+=mainKeys[0]+“:\”+obj[i]+“\”,”;
mainKeys.shift();
}
}
}
document.getElementById(“结果”).innerHTML=result;
}
您应该开发一些东西,因为我不知道存在类似的东西。您需要编写一个递归方法,迭代对象键并向新的源对象添加属性。但是,一个困难是您还需要处理重复的(我看到了一些重复的)。如果您对键的格式有信心(它们只包含表示新属性的括号),那么您可以使用for…in
循环(for key in your object
)在对象中对键进行迭代,并查找substr(key.indexOf('[')、key.indexOf('])
查找逻辑描述。祝你好运!你必须开发你自己的。你能给我一些提示吗,那将非常感谢。使用eval
通常是不受欢迎的,但是如果你只是开发一个脚本来转换这个脚本的话(只是在这个时候,不打算让它在某个应用程序或网页或某物中运行),我想我会考虑玩<代码>对象。和RegExp
@Steeve Pitis好的,谢谢,我会检查一下,我已经试过了,但是像你期望的那样,duplications出现了一些问题,但是我会处理这些问题并让你知道。无论如何,谢谢你的回答。没有问题——问题是,你的原始对象的编写方式,有重复的——如果你不想覆盖的话重复项,你还需要处理它们,这意味着转换不仅仅是一个“转换器”,它也是一个“验证器/处理程序”,这将更加困难。祝你好运!经过大约4个小时的开发,我终于做到了,我会选择你的答案作为最佳答案,因为你给了我方法谢谢:).这是一个很好的结果,它还不是最优的,但我会做到的:谢谢投票,谢谢你提出解决方案——这都是很好的解决方案。至于处理副本,是的,这不会非常容易——而且它将具体取决于你对如何处理副本的要求。我希望你该死!
{
Events: {
Id: “1476258193”,
Creator: “aziz”
…..
Review: {
Thankyou: “”,
Teaser: “”
}
}
}
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;
}