Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 更改JSON对象格式函数_Javascript_Json - Fatal编程技术网

Javascript 更改JSON对象格式函数

Javascript 更改JSON对象格式函数,javascript,json,Javascript,Json,我需要开发一个Javascript函数,可以如下转换JSON格式。我不确定是否已经有一个javascript函数用于此目的,或者我应该自己开发一个新函数 输入:(示例) 输出应该是这样的: { Events: { Id: “1476258193”, Creator: “aziz” ….. Review: { Thankyou: “”,

我需要开发一个Javascript函数,可以如下转换JSON格式。我不确定是否已经有一个javascript函数用于此目的,或者我应该自己开发一个新函数

输入:(示例)

输出应该是这样的:

{
  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;
}