【问题标题】:Convert dot notation json转换点符号 json
【发布时间】:2014-10-14 18:32:44
【问题描述】:

我得到了一个这样的 json 对象:

{
 "c.employees": "222",
 " c.arr[0].name": "thomas",
 " c.arr[0].amount": 3,

}

我想把它转换成类似的对象

{
 c:{
 employees:"222",
 arr:[{name:thomas,amount:3}]
 }
}

找不到任何解决方案:/数组是问题

【问题讨论】:

  • 恐怕没有捷径可走,你得写一个小解析器(我想有十几行)。
  • 原始 JSON 是从哪里来的?以这种格式生成它是否有正当理由,或者是否可以更改源以产生实际有用的东西?

标签: javascript json


【解决方案1】:

没有简单的解决方案,您需要解析所有键并构建中间对象和数组。由于这不是微不足道的,这里是代码:

var input = {
 "c.employees": "222",
 " c.arr[0].name": "thomas",
 " c.arr[0].amount": 3,
};
var output = {};
for (var key in input) {
  var tokens = key.trim().split('.'),
      obj = output;
  for (var i=0; i<tokens.length-1; i++) {
      var m = tokens[i].match(/^(\w+)\[(\d+)\]$/); // array ?
      if (m) {
         var arr = obj[m[1]];
         if (!arr) arr = obj[m[1]] = [];
        obj = arr[m[2]] = arr[m[2]]||{};
      } else {
         obj = obj[tokens[i]] = obj[tokens[i]]||{};
      }
  }
  obj[tokens[i]] = input[key];
}
console.log(output);

demo(打开控制台)

【讨论】:

    猜你喜欢
    • 2018-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-21
    • 2021-11-17
    • 1970-01-01
    • 2017-07-12
    • 1970-01-01
    相关资源
    最近更新 更多