循环生成JSON

时间:2016-05-02 06:49:52

标签: javascript json node.js loops

我有一个非常简单但复杂的问题要问。我正在开发facebook messenger bot并陷入一个问题:

我的JSON文件结构如下:

{ 
  itemname1: 'Name1',
  itemaddress1: 'Address1',
  itemtelephone1: 'Telephone1',
  services1: {
    service1name1: 'servicename1',
    service1price1: 'serviceprice2' 
    }
  itemname2: 'Name2',
  itemaddress2: 'Address2',
  itemtelephone2: 'Telephone2',
  services2: {
    service2name1: 'servicename1',
    service2price1: 'serviceprice2' 
    }, {
    service2name1: 'servicename1',
    service2price1: 'serviceprice2' 
    }
}

我从file.json中读到它。

现在要给用户发消息,我必须生成JSON对象才能让Facebook了解它。该计划是:

function sendGenericMessage(sender) {
messageData = {
"attachment": {
  "type": "template",
  "payload": {
    "template_type": "generic",
    "elements": [{
      "title": "First card",
      "subtitle": "Element #1 of an hscroll",
      "image_url": "http://messengerdemo.parseapp.com/img/rift.png",
      "buttons": [{
        "type": "web_url",
        "url": "https://www.messenger.com/",
        "title": "Web url"
      }, {
        "type": "postback",
        "title": "Postback",
        "payload": "Payload for first element in a generic bubble",
      }],
    },{
      "title": "Second card",
      "subtitle": "Element #2 of an hscroll",
      "image_url": "http://messengerdemo.parseapp.com/img/gearvr.png",
      "buttons": [{
        "type": "postback",
        "title": "Postback",
        "payload": "Payload for second element in a generic bubble",
      }],
    }]
  }
}

};

所以我要实现的是从数据库中读取并按元素计数生成卡片。例如,我的JSON中有itemname1和itemname2,所以这应该导致:

"elements": [{ 
   "name": "First card"
   blah-blah
   }, {
   "name": "Second card"
   blah-blah
   }]

按钮也一样。任何想法如何明智地执行它?哦,是的,我正在使用带有Express和LokiJS的Node.JS来实现数据库。 (虽然这是更多的JS算法问题)。

感谢您的时间。

1 个答案:

答案 0 :(得分:2)

您无需创建JSON 。您必须使用JS对象,然后您可以按原样将它们发送到客户端,或者使用JSON.stringify()来获取您的JSON。

通过这种方式,您将拥有

var elements = [];
//loop through db elements:
elements.push(element_from_db);
//end_loop

然后

messageData.payload.elements = elements;