【aws・lambda・node.js】lambda内のjsonの要素の値がなぜか取得できず、4時間さまよった話

 

【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形式のチェックツールなどでも形式に問題ないなどの結果が出ていたから

はー、気を取り直して、次行きます。

以上です。

Leave a Reply

Your email address will not be published.

CAPTCHA