【aws・lambda】lambda内のjsonの要素の値がなぜか取得できず、4時間さまよった話
結論
- json形式のファイルだと思っていたら、jsonのような形をしたstringだった
- Json.parse(見た目がjsonぽいstring)をしてあげたら、うまく動作するようになった
- 4時間彷徨ったので、精神的ダメージが大きかった
概要
aws lambdaを使って、json形式のデータを処理してました。
見た目は以下のような感じの普通のjsonファイル、、、です。
コード
{ "incident_level": "0", "incident_details": "Normal Voltage", "device_name": "ABC99999", "device_voltage": "40" }
なのですが、このjsonの要素を取得しようと思っても、取得できない、、、という事件です。
以下のような感じで、普通取得できます。
コード
const data = { "incident_level": "0", "incident_details": "Normal Voltage", "device_name": "TPC99999", "device_voltage": "40" };
console.log(data.incident_level); # incident_levelに該当する'0'が表示されるはず、、、なのにundefined、、、と出る
しかしundefiendとして取得できません。
なんでだ、、、4時間彷徨った結果、、、jsonの見た目をした、stringだったからでした。jsonのオブジェクトになってなかった、、、
まずはjsonっぽいもののデータ型を確認しようとおもってデータ型を確認するためのtypeofを使いました。
以下のような感じ。
コード
console.log(typeof data);
そしたら、ばっちりstringと表示されました。
なので、以下のような感じでparseしてあげると、、、
コード
Json.parse(data);
cosole.log(typeof data);
ばっちりJsonになって返ってきました。
これに気づくのに4時間、、、
きつすぎる、、、
はまってしまった理由はいくつもあって、以下のようなものがあります。
- 一回同じような感じで作業した時は動いていたから
- CloudWatchLogとかでみた時は、Jsonぽい感じにうまく見せてくれてたから
- onlineのJson形式のチェックツールなどでも形式に問題ないなどの結果が出ていたから
はー、気を取り直して、次行きます。
以上です。