55223


フロント側からサーバに

[code]

    {"type":"flex","altText":"Flex Message","contents":{"type":"carousel","contents":[{"type":"bubble","direction":"ltr","hero":{"type":"image","url":"URL","align":"start","size":"full","aspectRatio":"1:1","aspectMode":"cover"},"footer":{"type":"box","layout":"horizontal","contents":[{"type":"button","action":{"type":"uri","label":"Button","uri":"URL2"}}]}}]}}
    
[/code]

というObjectをAPIに使う目的で送信したいのですが、Objectはそのままpostできなかったため、一度JSON.stringfyしてからサーバにpostします。  
サーバ側で`console.log(req.body)`を出力すると表示上は正常なのですが、API等で値を渡そうとすると

[code]

    {\\"type\\":\\"flex\\",\\"altText\\":\\"Flex Message\\",\\"contents\\":{\\"type\\":\\"carousel\\",\\"contents\\":[{\\"type\\":\\"bubble\\",\\"direction\\":\\"ltr\\",\\"hero\\":{\\"type\\":\\"image\\",\\"url\\":\\"URL\\",\\"align\\":\\"start\\",\\"size\\":\\"full\\",\\"aspectRatio\\":\\"1:1\\",\\"aspectMode\\":\\"cover\\"},\\"footer\\":{\\"type\\":\\"box\\",\\"layout\\":\\"horizontal\\",\\"contents\\":[{\\"type\\":\\"button\\",\\"action\\":{\\"type\\":\\"uri\\",\\"label\\":\\"Button\\",\\"uri\\":\\"URL2\\"}}]}}]}}
    
[/code]

のように大量のエスケープシークエンスがついてしまいます。  
元の配列に戻すためunescape()関数を使用しても正常にならず、困っております。

知りたい点として、今自分は

  1. Objectをサーバにpostする方法を間違えている
  2. JSONをAPI等でstrとして使う方法を間違えている

どちらになるのでしょうか？  
原因がどこにあるのか自分でわかっていないため、適合する内容も見つけられずに困っております。ご助言いただけると助かります。

**追記**  
失礼しました。expressで  
1)フロント側post

[code]

    $.post({
    　　url: "/{post_path}",
    　　data: {post_data}
    })
    
[/code]

2)サーバ側受信

[code]

    app.post("/{post_path}", function (req, res, next) {
        var { 各パラメータ } = req.body;
    　　APIfunction(req.body)
    
[/code]

の様な形でやりとりしております。  
APIはLINE APIでpush(Flex)を送っております。

[Messaging APIリファレンス - Flex Message | LINE
Developers](https://developers.line.biz/ja/reference/messaging-api/#flex-
message)


CC BY-SA 4.0
2019-05-23T11:58:22.223
55199
2019-05-24T10:51:16.447
2019-05-24T00:54:04.193
3060
25869
question
javascript json
ObjectをJSON.stringfyしてpostするとエスケープシークエンスがつき、使用できなくなる


Express ウェブフレームワークを使っているというのが一番重要な情報でしたね。
<https://stackoverflow.com/questions/10005939/how-do-i-consume-the-json-post-
data-in-an-express-application> が見つかりました。

Express のバージョン 4.16
以上なら、[`express.json()`](http://expressjs.com/en/4x/api.html#express.json)
を使うことで `req.body` がオブジェクトになるようです。

ついでに `curl`
コマンドで期待する形式でPOSTしたり、ブラウザで実際POSTデータがどうなっているのかを確認できるとこれからの開発に役立つでしょう。

ブラウザ開発者ツールの `Network` タブ → 該当のリクエストを選択 →

  1. `Headers` → `Request headers` の `Content-Type` が application/json などサーバーが期待する値になっていること
  2. （Firefoxの場合）`Params` で JSON のところ，（Chromeの場合）`Headers` の下の `Request Payload` のところ  
[![ChromeでJSONをPOSTしているのを確認する](https://i.stack.imgur.com/VXSXu.png)](https://i.stack.imgur.com/VXSXu.png)  
に内容が表示されていること


CC BY-SA 4.0
2019-05-24T10:51:16.447
55223
2019-05-24T10:51:16.447
5469
55199
answer