ノードまたはExpress Ask Questionを使用してJSONを返す適切な方法

ノードまたはExpress Ask Questionを使用してJSONを返す適切な方法

したがって、次の JSON オブジェクトを取得しようとすることができます。

$ curl -i -X GET http://echo.jsontest.com/key/value/anotherKey/anotherValue
HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Content-Type: application/json; charset=ISO-8859-1
Date: Wed, 30 Oct 2013 22:19:10 GMT
Server: Google Frontend
Cache-Control: private
Alternate-Protocol: 80:quic,80:quic
Transfer-Encoding: chunked

{
   "anotherKey": "anotherValue",
   "key": "value"
}
$

ノードまたはエクスプレスを使用して、サーバーからの応答でまったく同じ本文を生成する方法はありますか? 明らかに、ヘッダーを設定し、応答のコンテンツ タイプが「application/json」になることを示すことができますが、オブジェクトを書き込む/送信する方法はいくつかあります。私がよく目にするのは、次の形式のコマンドを使用する方法です。

response.write(JSON.stringify(anObject));

しかし、これには「問題」であるかのように議論できる点が 2 つあります。

  • 文字列を送信しています。
  • また、最後に改行文字はありません。

別のアイデアとしては、次のコマンドを使用することです。

response.send(anObject);

これは、上記の最初の例と同様に、curl の出力に基づいて JSON オブジェクトを送信しているように見えます。ただし、curl がターミナルで再度使用されている場合、本文の最後には改行文字がありません。では、node または node/express を使用して、最後に改行文字を追加したこのようなものを実際にどのように記述すればよいのでしょうか。

ベストアンサー1

このレスポンスも文字列なので、もしレスポンスを整形して送りたい場合、以下のようなものが使えます。JSON.stringify(anObject, null, 3)

Content-Typeヘッダーを に設定することも重要ですapplication/json

const http = require('http');

const app = http.createServer(function(req,res){
    res.setHeader('Content-Type', 'application/json');
    res.end(JSON.stringify({ a: 1 }));
});
app.listen(3000);

// > {"a":1}

美しくなった:

const http = require('http');

const app = http.createServer(function(req,res){
    res.setHeader('Content-Type', 'application/json');
    res.end(JSON.stringify({ a: 1 }, null, 3));
});
app.listen(3000);

// >  {
// >     "a": 1
// >  }

なぜ改行で終了したいのかは正確にはわかりませんが、JSON.stringify(...) + '\n'それを実現するにはそうすればよいのです。

急行

Expressでは次のように実行できます代わりにオプションを変更する

'json replacer'JSON 置換コールバック、デフォルトでは null

'json spaces'フォーマット用の JSON レスポンス スペース。開発ではデフォルトで 2、本番環境では 0 になります。

実際には40に設定することは推奨されません

app.set('json spaces', 40);

その後、JSON で応答するだけです。

res.json({ a: 1 });

' 構成を使用して'json spaces美しくします。

おすすめ記事