【问题标题】:Build JSON Object from string containing multi-dimensional从包含多维的字符串构建 JSON 对象
【发布时间】:2012-06-09 15:30:51
【问题描述】:

我有一组名称/值对象(如下)。名称被格式化以表示多维数组。

我需要用它构建一个完整的 JavaScript 对象(底部)。

[{
name: "getQuote[origin]",
value: "Omaha,NE"
}, 
{
name: "getQuote[destination]",
value: "10005"
}, 
{
name: "getQuote[country]",
value: "us"
}, 
{
name: "getQuote[vehicles][0][year]",
value: "1989"
},
{
name: "getQuote[vehicles][0][make]",
value: "Daihatsu"
}, 
{
name: "getQuote[vehicles][0][model]",
value: "Charade"
}, 
{
name: "getQuote[vehicles][0][count]",
value: "1"
}]

变成这样:

{getQuote : 
  { origin : Omaha},
  { destination : 10005},
  {vehicles : [
   {
    year : 1989,
    make: Honda,
    model : accord
   },
   {
   //etc
}]

n

【问题讨论】:

  • There's no such thing as "JSON object". 你很可能只想要“对象”。
  • 补充说明,谢谢,Oleg。
  • 好吧,用 [] 块分割它并按需自动激活对象似乎并不难。唯一棘手的部分是为仅使用数字索引的级别激活 Array 对象。
  • @OlegV.Volkov,这就是问题所在! 似乎没有那么难,但尝试解决它,它肯定会吃掉你的大脑。自过去 15 分钟以上以来,我一直在尝试解决它,甚至没有接近解决方案!
  • 分手我正在这样做:strAry = myArray[i].replace(/\]/g, "").split("["); 但这只是难题的一部分。

标签: javascript json multidimensional-array


【解决方案1】:

您可以手动完成,如下所示:

var source = [ /* Your source array here */ ];
var dest = {};

for(var i = 0; i < source.length; i++)
{
    var value = source[i].value;

    var path = source[i].name.split(/[\[\]]+/);

    var curItem = dest;

    for(var j = 0; j < path.length - 2; j++)
    {
        if(!(path[j] in curItem))
        {
            curItem[path[j]] = {};
        }

        curItem = curItem[path[j]];
    }

    curItem[path[j]] = value;
}

dest 是结果对象。

在这里检查它是否工作:http://jsfiddle.net/pnkDk/7/

【讨论】:

  • 甜蜜!简短,非常好!
  • MMmm,一些我以前没见过的新东西,谢谢。我得到的解决方案并不像这样优雅。谢达尔,给你金星。
  • 这不会为数字索引创建数组,因为它应该。我认为您可以轻松解决此问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-29
  • 2021-08-04
  • 2013-11-28
  • 1970-01-01
  • 2020-09-04
相关资源
最近更新 更多