代码之家  ›  专栏  ›  技术社区  ›  Kurkula

Jquery向json对象添加值数组

  •  0
  • Kurkula  · 技术社区  · 8 年前

    我正在尝试获取一个json对象,如下所示

     {
        "Name":"UnitedStates",
          "Info":[
            {"StateName":"Washington",
                  "Commands":[
                           {"Type":"Men","Parameter":"10000"}, 
                           {"Type":"Women","Parameter":"30000"}
                         ]},
            {"StateName":"California",
                   "Commands":[
                            {"Type":"Kids","Parameter":"20000"}
                              ]}
                         ]}
    

    我在试下面的 Fiddle

    如何将值数组添加到现有的空白对象中。

        var CountryName = 'UnitedStates';
    
        var Data = {
            Name: CountryName,
            Info: [
            commands :[]
            ]
           }
    
        Data.Info.push({'StateName': 'washington'});
        Data.Info.commands.push(
        {'Type': 'Men'},
         {'Parameter': '1000'},
    
        );
    
    
         $('.displayJsonBlock').empty();
        $('.displayJsonBlock').append('<pre><code>' + JSON.stringify(TemplateData) + '</pre></code>')
    
    2 回复  |  直到 8 年前
        1
  •  3
  •   Mark    8 年前

    如果您查看错误控制台输出,您将看到它给出了一个语法错误,因为 Info 正在尝试同时成为对象和数组:

    Info: [
        commands :[]
    ]
    

    如果你想推进 信息 它需要是一个数组,但这意味着您不能像这样在文本中定义属性。如果要定义这样的属性,它需要是一个对象,如:

    Info: {
        commands :[]
    }
    

    但那你就推不动了。

    我想你要找的是:

    var CountryName = 'UnitedStates';
    
    var Data = {
      Name: CountryName,
      Info: [] // info is just an array
    }
    
    Data.Info.push({
      'StateName': 'washington',
      commands: []               // each element of Info is an object with a commands array
    });
    Data.Info[0].commands.push(  // you need to define which element of info. Here it's the first
        {'Type': 'Men'}, 
        {'Parameter': '1000'},
    );
    console.log(Data)

    当然你不需要做两次推,你可以推整个物体,包括 commands :

    Data.Info.push({
      'StateName': 'washington',
      commands: [
        {'Type': 'Men'}, 
        {'Parameter': '1000'}
       ]
    })               
    
        2
  •  1
  •   Pablo DbSys    8 年前

    好吧,JSON数据的结构是不正确的,我想您应该这样做

    var CountryName = 'UnitedStates';
    
    var Data = {
        Name: CountryName,
        Info: [
          {commands :[]}
        ]
       }
    

    之后

    Data.Info.push({'StateName': 'washington'});
    Data.Info['commands'] = [{'Type': 'Men'}, {'Parameter': '1000'}];
    

    有个好办法,但我不知道这是否是你想要的。