在Javascript中构建复杂的JSON

时间:2017-02-14 21:04:50

标签: javascript json

刚开始使用JavaScript,需要一些关于如何在动态/动态下最好地创建/构建JSON的指导。

某些键需要来自变量。例如,在下面的JSON中,键名为' variable_key _ *'将需要来自变量。

{
  "static_key_1": "value",
  "static_key_2": [{
    "static_key_3": {
      "id": "1097274153"
    },
    "static_key_4": "value",
    "static_key_5": {
      "static_key_6": {
        "variable_key_1": "value",
        "variable_key_2": "value",
        "variable_key_3": "value"
      },
      "static_key_7": {
        "static_key_8": [
          "value"
        ]
      }
    }
  }]
}

2 个答案:

答案 0 :(得分:1)

您可以使用括号表示法在变量对象中设置键。

{ useful_name : 12345 }

将导致:

myObj [ someOtherVar ] = {};
let myObjSomeOtherVar = myObj [ someOtherVar ];
myObjSomeOtherVar [ someOtherKey ] = [ ].push ( { } );
let theArrayOfObjects = myObjSomeOtherVar [ someOtherKey ];
theArrayOfObjects [ 0 ] [ anotherKeyName ] = 'hello';

按照您的预期进行字符串化。

根据请求进行编辑以获取更多信息:

假设您想要创建一个包含对象数组的嵌套对象,我们将使用我们已有的对象。

{ useful_name : 12345,
  valOfSomeOtherVar : 
      { valOfSomeOtherKey : 
          [ { valOfAnotherKeyName : 'hello' } ] 
      }
} 

这会导致(假设您实际宣布了所有变量等)

curl -b cookies -c cookies -X POST -d '{"auth": {"username":"MyUser","password":"Secret"}}'  'http://api.awesome.service.com/'

诀窍是抽象地开发数据模式(所以你想要的骨架),然后编写一个构建它的例程。我很少用这种方式手工构建一个对象,除非它只是一个小的util obj,我通常将一个空对象提供给一个例程来构建它(使用循环,递归,条件,等等)。至于实践,至少有一个数据结构文档的骨架总是一个好主意,它也可以作为参考来编写可以通过为键名和值传递一些变量来生成整个事物的函数。 。您可以为该函数编写一个测试,该测试可以返回您预测的对象等。

答案 1 :(得分:1)

如果您不需要在一个声明中创建它(并且几乎没有机会),您可以按照以下步骤操作:

var yourObject = {
  "static_key_1": "value",
  "static_key_2": [{
    "static_key_3": {
        "id": "1097274153"
    },
    "static_key_4": "value",
    "static_key_5": {
        "static_key_6": {},
        "static_key_7": {
            "static_key_8": [
                "value"
            ]
         }
     }
  }]
}

/* Get their value from wherever you want */
var variable_key_1 = 'something';
var variable_key_2 = 'something_else';
var variable_key_3 = 'another_one';

yourObject.static_key_2[0].static_key_5.static_key_6[variable_key_1] = 'value';
yourObject.static_key_2[0].static_key_5.static_key_6[variable_key_2] = 'value';
yourObject.static_key_2[0].static_key_5.static_key_6[variable_key_3] = 'value';

策略是使用括号表示法在具有静态名称的属性之后构建具有变量名称的属性的对象。

这将导致:

{
  "static_key_1": "value",
  "static_key_2": [{
    "static_key_3": {
        "id": "1097274153"
    },
    "static_key_4": "value",
    "static_key_5": {
        "static_key_6": {
          "something": "value",
          "something_else": "value",
          "another_one": "value"
        },
        "static_key_7": {
            "static_key_8": [
                "value"
            ]
         }
     }
  }]
}