繁体   English   中英

更改 JSON 对象格式函数

[英]Change JSON Object format function

我需要开发一个可以转换 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”,我自己做了这个功能,如果有人对此感兴趣,这是一个有答案的 plunker,该功能不是 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;
}

你应该开发一些东西,因为我不知道存在这样的东西。 您将需要编写一个递归方法来迭代对象键并将属性添加到新的源对象。 但是,一个困难是您还需要处理重复项(我看到了一些)。 如果您对键的格式有信心(它们只包含表示新属性的括号),那么您可以编写一些使用for...in循环( for key in yourobject )迭代对象for key in yourobject并寻找substr(key.indexOf('['), key.indexOf(']')来寻找逻辑描述。祝你好运!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM