如何在 parent 的声明中设置一个 JSON object 等于另一个 JSON object

how to set a JSON object equal to another JSON object within the parent's declaration

我是 javascript 和 json 的新手,正在处理一些代码。

这是我的格式 JSON object

messageData = {
     "attachment": {
         "type": "template",
         "payload": {
             "template_type": "generic",
             elements: [{
                 title: "titleOne",
                 subtitle: "subtitleOne"
             }, {
                 title: "titleTwo",
                 subtitle: "subtitleTwo"
             }]
         }
     }
 }

我不想将每个标题和副标题 object 单独添加到元素中,而是想通过循环来做到这一点,只需将一个 object 设置为一个包含更多数量的数组标题和副标题 objects。所以假设我有 object 个标题:

titles = {} //100 objects with different titles and subtitles.

有没有办法实现如下所示的逻辑?

 messageData = {
            "attachment": {
                "type": "template",
                "payload": {
                    "template_type": "generic", 
                     elements = titles
                } 
            }
        }

是否正确格式化了所有内容?感谢您的帮助!

您有一个变量 titles,它有一个 array of objects 分配给它。类似于:

var titles = [{...}, {...}, ...];

您稍后想要将此数组(当前分配给变量 titles)分配给 object属性(在本例中为 elements):

var messageData = {
    attachment: {
        type: "template",
        payload: {
            template_type: "generic", 
            elements // <-- here
        } 
    }
}

(请注意,我从 属性 名称中删除了双引号 ,它们不是必需的,因为它们具有有效的符号)

如您所料,没有比这更容易的了:

var messageData = {
    attachment: {
        type: "template",
        payload: {
            template_type: "generic", 
            elements: titles
        } 
    }
}

这足以作为一个答案,但现在让我们退后一步:在 javascript 中几乎所有东西都是一个 object(我正在简化一个这里有点,例如字符串不是对象,但我邀请你自己去了解更多)。但是,是的,一开始听起来令人困惑,array 是一个 object.

另一件需要知道的事情是,在 javascript 中,对象是通过引用分配的。这意味着如果您修改原始 titles 数组,elements 数组也会被修改。它们只是指向同一个对象的两个名称。

在你的具体情况下,这个细节可能无关紧要,但如果你想分开 titleselements 的生活,你需要 克隆 原始数组,然后再次分配它。最快的方法是通过 JSON 转换:

var titles_0 = JSON.parse(JSON.stringify(titles));
var messageData = {
    attachment: {
        type: "template",
        payload: {
            template_type: "generic", 
            elements: titles_0
        } 
    }
}