(TypeScriptに限らずJavaScriptでもだいたいこのような感じだと思いますが)
例えば以下のようなコードを書くと,出力としては {"body":{}}
が得られます.
const body = new Map<string, string>().set("foo", "bar"); console.log(JSON.stringify({body}));
本当は {"body": {"foo": "bar"}}
のような構造がほしいところにこれでは困るわけですね.
そこでどうするかと言うと Object.fromEntries()
を利用すると良い:
const body = new Map<string, string>().set("foo", "bar"); console.log(JSON.stringify({body: Object.fromEntries(body)}));
このようにするとめでたく {"body": {"foo": "bar"}}
という構造が得られる.ヤッター!!
これはid:sugyanさんに教えていただきました.ありがとうございます!
Object.fromEntries() ?
なお注意点としては以下のとおりです
- node 12以降のバージョンが必要
- tsconfigのlibの指定に
es2019
を指定する必要あり
以上です.助かりましたね.
以下はやり取りのおまけです.
うおー,ES6の `Map<K, V>` をJSON.stringify (というかObject化) すると `{}` になるの全く知らなかった!!!
つJSON.stringify([...map])
それやると `[["unko", "daisuki"]]` みたいな感じにならない? `{"unko": "daisuki"}` になってほしいのだけど
たしかに。気合でやるかなんか適当なグッズ持ってきて使いましょう
結局こうよ
const body = meta ? meta : new Map<string, string>();
body.set(this.messageAttributeName, msg);
const bodyObj = {};
for (const [key, value] of body.entries()) {
bodyObj[key] = value;
}
{k:Symbol()}が{}になるのも趣ある