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

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

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

npmは、Node Packaged Modulesの略。Node.jsのライブラリ・パッケージを管理できるツールです。様々なモジュールを簡単にインストールでき、自分でモジュールを作成し公開する際にも使用できます。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Q&A

解決済

1回答

6838閲覧

Unexpected token u in JSON at position 0のエラーが出てしまう

okamochan

総合スコア16

npm

npmは、Node Packaged Modulesの略。Node.jsのライブラリ・パッケージを管理できるツールです。様々なモジュールを簡単にインストールでき、自分でモジュールを作成し公開する際にも使用できます。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

0グッド

0クリップ

投稿2018/10/02 05:33

編集2018/10/02 12:35

前提・実現したいこと

こんにちは。
Raspberry Pi Zero WでNodejsとnpmとOpenWeatherMapを用いて天気の予測プログラムを書いていたのですが、いざ実行しようとすると以下のエラーが出てしまいました。
色々検索して見たのですが初心者なのでよくわかりませんでした。。。
よろしくお願いします。

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

undefined:1
undefined
^

SyntaxError: Unexpected token u in JSON at position 0
at JSON.parse (<anonymous>)
at Request._callback (/home/pi/node_modules/npm-openweathermap/lib/weather.js:51:15)
at self.callback (/home/pi/node_modules/request/request.js:185:22)
at Request.emit (events.js:182:13)
at Request.onRequestError (/home/pi/node_modules/request/request.js:881:8)
at ClientRequest.emit (events.js:182:13)
at Socket.socketErrorListener (_http_client.js:391:9)
at Socket.emit (events.js:182:13)
at emitErrorNT (internal/streams/destroy.js:82:8)
at emitErrorAndCloseNT (internal/streams/destroy.js:50:3)

該当のソースコード

var weather = require('npm-openweathermap');  //ライブラリを持ってくる

weather.api_key = '取得APIキー';  //自分で取得したAPIキーを入力

weather.get_weather_custom('city','Tokyo','forecast').then(function(res){   //get_weather_customで東京の天気をとってくる。resの中に5日分の3時間ごとの天気予測
for(var I=0; I<7; I++){
var weather = res[I].weather[0];
console.log(weather.id);   //天気の表示
}
},function(error){
console.log(error)
})

試したこと

他の解決策のサイトを拝見し他のですがよくわからず、エラー発生の分の直前にconsole.log()を書くといいという答えがあったので試しましたがダメでした。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2018/10/02 10:43 編集

APIキーは晒さないほうが良いと思います。ものによるとは思いますが、他人に使われることで利用上限を超えたり、課金されるかもしれません。
guest

回答1

0

ベストアンサー

試してないのでエラーからの推測になりますが、APIでとってきた結果をJSONパースするところで失敗していそうです。okamochanさんのコードにParseしている箇所は見受けられないので、get_weather_custom関数の中で失敗しているのかなと(エラーもそうなっているっぽい)。

ブラウザでAPIを実行してJSONを取得できるようなら、一度JSONを取得してみてその文法が正しいか確認してみてください。ただしいのであれば、ライブラリに問題があるかもしれません。

投稿2018/10/02 10:49

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

okamochan

2018/10/02 13:01

回答ありがとうございます。質問文のAPIキーは編集しました。以後気をつけます。。。 以下のURLの動画のプログラムを参考に作成して、URLの動画ではうまくいっているためライブラリに問題があるかもしれません、、、 その場合はライブラリを入れ直すのが良いのでしょうか? 参考:「RaspberryPiで作る:今日の天気」http://essence.cambrianrobotics.com/contents/%E3%81%BE%E3%81%9A%E5%A4%A9%E6%B0%97%E4%BA%88%E5%A0%B1API%E3%82%92%E4%BD%BF%E3%81%86/17
退会済みユーザー

退会済みユーザー

2018/10/02 13:32

ごめんなさい、エラーを読み間違えていたようです。 私がデスクトップPCで試したところうまくいきました。LANケーブルを外したら同じエラーがでたので、おそらくネットにつながってないのではないでしょうか。
okamochan

2018/10/03 02:31

ラズペリーパイがLAN接続はできているようなのですが、ネットにつながっていないようでした。 プロキシの設定が原因なのですかね、、、 ありがとうございます!試してみます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問