質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Cloud9

Cloud9は、クラウドからのプログラミングが可能になるWebサービス。IDEとしての機能が搭載されており、GitHubやHerokuなど他ツールとの連携も可能です。ブラウザ上で動くため、デバイスに関係なく開発環境を準備できます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

3回答

6257閲覧

Jsonに問題がないのにSyntaxError

MinoKita

総合スコア13

Cloud9

Cloud9は、クラウドからのプログラミングが可能になるWebサービス。IDEとしての機能が搭載されており、GitHubやHerokuなど他ツールとの連携も可能です。ブラウザ上で動くため、デバイスに関係なく開発環境を準備できます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

1クリップ

投稿2018/10/08 10:34

編集2018/10/09 09:16

前提・実現したいこと

Cloud9にてAPI Gatewayを作成し、lambadaをrunしたところjsonには問題ないにも関わらず以下のエラーが発生しています。Cloud9で作成した直後の状態ですのでわけわかりませんが、どうしてでしょう?

発生している問題・エラーメッセージ

Function Logs
2018-10-08 10:24:25.457 { AvatarUUID: '8', LoginTime: 'The Last Jedi' }
2018-10-08 10:24:25.463 SyntaxError: Unexpected token o in JSON at position 1
at Object.parse (native)
at exports.handler (/var/task/Login/index.js:8:21)

Request ID
8ca0e326-16e2-1785-ae73-08b25f154a4e

該当のソースコード

JavaScript

1console.log(event); 2var body = JSON.parse(event); 3 var params = { 4 TableName: 'AvatarTrackerUserInfo', 5 Item: { 6 AvatarUUID: body.AvatarUUID, 7 LoginTime: body.LoginTime 8 } 9 };

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

Cloud9にてApiGatewayを作成した直後の状態で入力値はRunのパネルから

JSon

1{ 2 "AvatarUUID": "8", 3 "LoginTime": "The Last Jedi" 4}

を入れています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/10/08 10:36

一応jsonも記載ください。
guest

回答3

0

SyntaxError: Unexpected token o in JSON at position 1

o で始まるデータが入っていることがわかります。
おそらく、 event 変数の中身は JSON 文字列ではなく、 object だと思います。

投稿2018/10/08 12:17

編集2018/10/08 12:18
mather

総合スコア6753

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

自己解決

オブジェクトということで、こうすることでひとまずパースをやめたらエラーはでなくなりました。event.AvatarUUIDで普通に取れました。。リモートとローカルじゃ値の取りだし方が違うようで一階層深くなるようです。つまりすでにパースされているか、されてないかみたいですね。

JavaScript

1 console.log(event); 2 //var body = JSON.parse(event); 3 var params = { 4 TableName: 'AvatarTrackerUserInfo', 5 Item: { 6 AvatarUUID: event.AvatarUUID, 7 LoginTime: event.LoginTime 8 } 9 }; 10 console.log(params);

追記
すいません。event.AvatarUUIdで普通に取れましたと書きましたが、とんちんかんでした。
結局DBに入れられず定義されていませんでした。

投稿2018/10/08 14:59

編集2018/10/09 09:01
MinoKita

総合スコア13

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mather

2018/10/09 05:51

> リモートとローカル それぞれどんな実行の仕方で確認したんですか?
MinoKita

2018/10/09 09:12 編集

回答ありがとうございました。 上記のコードでlambada(Remote)では正常にparamsが生成でき、DBに入りました。どうも私がてんぱってデプロイせずに実行したようです。お恥ずかしい。。リモートではひとまず該当箇所は問題なくなりました。DynamoDBにアクセスできないよというエラーに変わりましたのでIAMのロール設定にDynamoDB権限がおかしいのでしょう。お騒がせしました。
guest

0

console.log(event);の結果がJSONとしておかしくなってますね。キーにダブルクオーテーションがなく、値はシングルクオーテーションになっています。
JSON.parse(event.body);としてみるとどうでしょうか?

投稿2018/10/08 12:06

Udomomo

総合スコア1524

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

MinoKita

2018/10/08 14:14

回答ありがとうございます。そう思ったんですが、そうするとコンソールにログでundefinedと吐きます。参考にしたページにリモートとローカルでは取り出し方が違ってコード修正が必要とあり、最初event.bodyだとエラーになったので。実はJS10年ぶりに触ったんですが、何か基本を見落としてそうですね。 console.log(event.body); var body = JSON.parse(event.body); Response Function Logs 2018-10-08 13:48:36.860 undefined 2018-10-08 13:48:36.865 SyntaxError: Unexpected token u in JSON at position 0 at Object.parse (native) at exports.handler (/var/task/Login/index.js:8:21) Request ID 4bc95056-2158-14d7-8e73-b459fdeb136b
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問