使用Javascript将嵌套密钥添加到JSON

时间:2014-07-23 19:46:20

标签: javascript json

我刚刚开始学习Javascript,所以如果这是一个愚蠢的问题我会道歉。

基本上我的问题是:

通过我无法更改的外部表格,我收到以下数据。

var data = "{\"status\": \"created\", \"name\": \"mike\", \"roleName\": \"Signer\", \"emailSubject\": \"test\", \"email\": \"hellO@yahoo.com\", \"templateId\": \"0171502E-38F7-43A7-BA09-6FC1FDAB09C2\" }"

在我通过API发送数据之前,文档要求我添加一个额外的嵌套密钥(templateRoles)来将rolename,emailsubject和email包装到一个新数组中。最终结果假设看起来像这样。

var data = "{\"status\": \"created\", \"name\": \"mike\", \"templateRoles\": [{ \"roleName\": \"Signer\", \"emailSubject\": \"test\", \"email\": \"hellO@yahoo.com\"}], \"templateId\": \"0171502E-38F7-43A7-BA09-6FC1FDAB09C2\"}"

对于我的生活,我无法弄清楚如何做到这一点。我尝试过使用拼接和替换,但要么是我做错了,要么是不正确的做法。任何有关正确方向的建议或指示都将不胜感激。

提前致谢。

2 个答案:

答案 0 :(得分:0)

使用JSON.parse(data)将您的JSON字符串转换为对象。然后你可以操纵那个对象。完成操作后,只需使用JSON.stringify()来获取JSON字符串。

示例代码:

var data = "{\"status\": \"created\", \"name\": \"mike\", \"templateId\": \"0171502E-38F7-43A7-BA09-6FC1FDAB09C2\", \"templateRoles\": [{ \"roleName\": \"Signer\", \"emailSubject\": \"test\", \"email\": \"hellO@yahoo.com\"}]}";

var jsonObj = JSON.parse(data);
jsonObj.templateRoles = "some roles here";

var newDataStr = JSON.stringify(jsonObj);

答案 1 :(得分:0)

所以你的基本代码看起来像这样。将JSON字符串设为JavaScript对象,然后对其进行操作。之后,您可以使用JSON.stringyfi放回JSON字符串。

var jsonData = "{\"status\": \"created\", \"name\": \"mike\", \"templateId\": \"0171502E-38F7-43A7-BA09-6FC1FDAB09C2\", \"roleName\": \"Signer\", \"emailSubject\": \"test\", \"email\": \"hellO@yahoo.com\"}";

var parsedJson = JSON.parse(jsonData);

// now manipulate

parsedJson.newProperty = "hey there";

parsedJson.status = "not created";

作为旁注,我不认为您可以订购密钥,因此您可以在添加属性或功能方面做任何事情。永远不要依赖钥匙。按键,我的意思是对象的函数名称的属性。对象以字典类型的方式保存,其中键包含信息。

所以:

parsedJson["created"]

相同
parsedJson.created

您可以根据密钥是否存在有条件地添加数据:

for (var key in parsedJson)
    if (key === "someKey")
        // do something

OR

if (parsedJson["someKey"] === undefined)
    // do something