【问题标题】:how to dynamically build new json from old in javascript [duplicate]如何在javascript中从旧的动态构建新的json [重复]
【发布时间】:2017-02-05 22:22:23
【问题描述】:

我从 wit.ai 收到一个带有一些快速回复元素的 json 对象,如下所示:

 "msg": "So glad to have you back.  What do you want me to do?  
 "action_id": "6fd7f2bd-db67-46d2-8742-ec160d9261c1",
 "confidence": 0.08098269709064443,
 "quickreplies": [
   "News?",
   "Subscribe?",
   "Contribute?",
   "Organize?"
 ],
 "type": "msg"

然后我需要将它们转换为稍微不同的格式,因为它们被传递到 FaceBook Messenger,如下面的代码中所述。 Wit 只公开“msg”和“quickreplies”。你能提出一个好的方法来做到这一点吗?据我了解,它在“console.log(element)”之后。

      if (quickreplies){
        // got simple array of quickreplies
        // need to format quickreplies for FB:
                                  //  "quick_replies":[
                                  //     {
                                  //       "content_type":"text",
                                  //       "title":"Red",
                                  //       "payload":"DEVELOPER_DEFINED_PAYLOAD_FOR_PICKING_RED"
                                  //     },
                                  //     {
                                  //       "content_type":"text",
                                  //       "title":"Green",
                                  //       "payload":"DEVELOPER_DEFINED_PAYLOAD_FOR_PICKING_GREEN"
                                  //     }]
        console.log('we got quickreplies, here they are:');
        var quick_replies = []; // ??
        quickreplies.forEach(function(element) {
          console.log(element)

        });
      }
      else (console.log('no quickreplies'));                               

在上面的例子中,最终结果应该是这样的:

  //  "quick_replies":[
  //     {
  //       "content_type":"text",
  //       "title":"News",
  //       "payload":"News"
  //     },
  //     {
  //       "content_type":"text",
  //       "title":"Subscribe?",
  //       "payload":"Subscribe?"
  //     }
  //       "content_type":"text",
  //       "title":"Contribute?",
  //       "payload":"Contribute?"
  //     },
  //     {
  //       "content_type":"text",
  //       "title":"Organize?",
  //       "payload":"Organize?"
  //     }
  //  ]

【问题讨论】:

  • quickreplies 中的元素长什么样子?
  • 更新问题以显示机智响应 json

标签: javascript node.js facebook nlp wit.ai


【解决方案1】:

我认为最直接的方法是使用 JSON.parse() 将 JSON 转换为对象。

然后操作对象,根据需要删除和添加元素。

完成后,使用 JSON.stringify 将对象转换回 JSON 字符串。

【讨论】:

    【解决方案2】:

    也许这可以帮助你。

    function makeReply(text) {
        return { content_type: 'text', title: text, payload: text };
    }
    
    var replies = { quick_replies: [] };
        quickreplies.forEach(function(element) {
          replies.quick_replies.push(makeReply(element); // not sure what needs to be supplied for "title" and "payload"
    
        });
    

    【讨论】:

    • 是的,关闭。 “quick_replies”总是有零个或一个元素,但它由一个或多个由 content_type、title 和 payload 组成的回复组成。
    • 更新了代码。
    • content_type 始终为“文本”。 title 和 payload 总是等于 quickreplies[index']。
    • 代码已更新
    猜你喜欢
    • 2015-05-28
    • 2011-05-17
    • 1970-01-01
    • 2019-09-13
    • 1970-01-01
    • 2020-05-09
    • 2020-01-01
    • 2018-06-12
    • 1970-01-01
    相关资源
    最近更新 更多