简体   繁体   English

更改 JSON 对象格式函数

[英]Change JSON Object format function

I need to develop a Javascript function that can convert JSON format as the following.我需要开发一个可以转换 JSON 格式的 Javascript 函数,如下所示。 I am not sure if there is already a javascript function for this purpose or should i develop a new one on my own我不确定是否已经有一个用于此目的的 javascript 函数,或者我应该自己开发一个新的函数

Input: (example)输入:(示例)

  {
            "event[id]": "1476258193",
            "event[creator]": "aziz",
            "event[title]": "event[title]",
            "event[review][thankyou]": "event[review][thankyou]",
            "event[review][teaser]": "event[review][teaser]"
    }

The Output should be something like that:输出应该是这样的:

{
  Events: {
            Id: “1476258193”,
            Creator: “aziz”
            …..
            Review: {
                      Thankyou: “”,
                      Teaser: “”
}
}
}

EDIT (SOLUTION) : After some work and help from other users especially "anied" i did the function myself, if some one is interested here is a plunker with the answer, the function is not 100% optimal but it does what should do https://plnkr.co/edit/4d6cDzHXpN3RAOAJD2F0?p=preview编辑(解决方案):经过一些工作和其他用户的帮助,特别是“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;
}

You should develop something because I don't know that anything like that exists.你应该开发一些东西,因为我不知道存在这样的东西。 You will want to write a recursive method that iterates over the object keys and adds properties to a new source object.您将需要编写一个递归方法来迭代对象键并将属性添加到新的源对象。 However, one difficulty will be that you will also need to handle duplicates (of which I see a few).但是,一个困难是您还需要处理重复项(我看到了一些)。 If you can be confident of the format of the keys (that they only contain brackets to denote new properties), then you can write something that iterates over the keys in the object using a for...in loop ( for key in yourobject ) and looks for substr(key.indexOf('['), key.indexOf(']') to hunt down the logical delineations. Good luck!如果您对键的格式有信心(它们只包含表示新属性的括号),那么您可以编写一些使用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