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

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

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

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

Node.js

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

Q&A

1回答

12173閲覧

SyntaxError: Unexpected end of JSON input

aiai8976

総合スコア112

JSON

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

Node.js

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

0グッド

1クリップ

投稿2019/08/23 02:46

編集2019/08/25 05:34

前提・実現したいこと

raspiからJSONファイルをNode.jsに送って表示させる処理を考えています。
しかし、以下のようなエラーが発生しました。
JSON.parseはSTRINGをJSONに変換するという認識ですが、よくわかりません。
何か解決策があればコメントお願いします。

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

reqestのdataを出力してみたところ、いかのようなbuffer形式でした。Stringで送ったのにbufferになった原因はなにでしょうか。

hasegawa@hasegawa-W76OC:~/デスクトップ/akiyama/Node.js$ node webServer.js Server running Connected correctly to server /post_data <Buffer 7b 22 72 6f 74 22 3a 20 5b 30 2e 30 35 37 39 37 38 36 35 31 39 30 35 37 38 37 38 31 2c 20 30 2e 31 34 36 32 36 35 30 34 34 34 36 37 31 33 39 37 38 2c ... > <Buffer 38 35 39 31 32 38 39 38 34 37 38 36 31 37 2c 20 32 37 2e 30 34 30 36 33 33 39 38 34 31 39 34 34 35 37 2c 20 32 37 2e 32 32 30 33 37 33 31 34 38 32 32 ... > <Buffer 31 36 2c 20 31 38 35 2e 33 33 38 36 37 35 38 31 33 38 32 30 35 32 2c 20 31 38 35 2e 37 30 30 31 38 34 31 39 30 35 34 36 32 38 2c 20 31 38 36 2e 30 36 ... > <Buffer 37 35 34 34 34 32 35 2c 20 32 30 36 2e 34 39 31 31 36 38 36 37 37 33 35 31 39 2c 20 32 30 36 2e 38 35 39 31 30 35 34 33 37 37 36 36 35 34 2c 20 32 30 ... > <Buffer 32 37 2e 36 36 35 32 34 33 37 35 38 35 30 30 31 37 2c 20 32 32 37 2e 39 33 37 32 38 32 31 36 30 30 33 38 33 34 2c 20 32 32 38 2e 32 31 30 30 39 33 31 ... > <Buffer 32 33 30 35 36 34 34 2c 20 32 34 35 2e 31 35 39 32 31 39 33 39 30 35 36 33 34 34 2c 20 32 34 35 2e 34 33 35 30 33 31 34 32 31 33 31 32 2c 20 32 34 35 ... > <Buffer 34 33 34 30 35 38 36 37 37 2c 20 32 38 35 2e 30 38 35 39 39 36 31 34 33 36 39 30 34 37 2c 20 32 38 35 2e 33 36 38 39 38 32 33 38 32 34 30 33 30 33 2c ... > <Buffer 35 2c 20 33 30 30 2e 32 35 36 39 38 39 39 39 39 35 38 31 37 2c 20 33 30 30 2e 34 32 37 33 36 39 34 38 39 30 31 34 35 2c 20 33 30 30 2e 35 39 35 37 35 ... > <Buffer 35 37 32 38 32 37 38 38 36 2c 20 33 31 37 2e 34 37 30 33 36 31 36 38 35 39 33 35 2c 20 33 31 37 2e 37 36 36 35 39 32 36 39 33 36 39 33 2c 20 33 31 38 ... > <Buffer 39 39 34 39 30 36 35 33 37 2c 20 33 33 32 2e 34 34 37 32 35 39 34 39 38 39 31 36 37 36 2c 20 33 33 32 2e 36 32 37 39 33 38 39 32 32 31 32 35 32 2c 20 ... > <Buffer 33 34 39 2e 32 38 34 32 37 36 31 36 31 34 38 35 35 2c 20 33 34 39 2e 36 35 37 35 39 33 34 33 37 37 33 33 39 36 2c 20 33 35 30 2e 30 33 34 35 35 31 39 ... > <Buffer 37 31 2e 36 34 35 38 31 39 39 30 36 30 36 30 34 2c 20 33 37 31 2e 39 30 30 30 36 35 34 34 39 33 35 38 33 35 2c 20 33 37 32 2e 31 33 32 33 33 30 36 39 ... > <Buffer 37 33 36 36 34 31 34 34 2c 20 33 39 30 2e 30 35 31 31 36 38 39 33 33 31 36 39 37 2c 20 33 39 30 2e 33 32 34 38 32 30 32 36 37 33 33 35 33 2c 20 33 39 ... > <Buffer 35 2c 20 34 30 33 2e 39 39 33 33 33 31 39 35 38 33 31 39 37 34 2c 20 34 30 34 2e 32 33 35 39 30 37 33 38 37 31 38 37 38 2c 20 34 30 34 2e 34 39 31 33 ... > <Buffer 39 33 32 39 32 2c 20 34 31 38 2e 33 38 33 34 36 30 31 31 37 36 36 30 38 2c 20 34 31 38 2e 36 36 32 32 38 34 33 39 34 32 35 37 33 2c 20 34 31 38 2e 39 ... > <Buffer 30 37 37 32 32 35 32 34 31 32 35 2c 20 34 35 32 2e 31 35 38 30 35 37 32 36 31 39 36 39 35 2c 20 34 35 32 2e 37 38 30 35 33 32 34 32 37 34 31 36 37 2c ... > <Buffer 39 37 35 39 38 35 36 33 33 2c 20 34 38 30 2e 34 33 36 30 31 36 34 31 39 34 36 31 36 2c 20 34 38 30 2e 36 32 37 37 39 31 32 36 30 39 34 34 39 35 2c 20 ... > <Buffer 31 30 30 36 33 2c 20 34 39 31 2e 38 36 31 37 32 33 35 38 31 33 34 33 31 2c 20 34 39 32 2e 30 37 39 34 31 37 38 34 35 36 37 34 39 2c 20 34 39 32 2e 33 ... > <Buffer 36 2c 20 34 34 32 2c 20 34 36 31 2c 20 34 35 33 2c 20 34 34 35 2c 20 34 36 34 2c 20 34 35 37 2c 20 34 34 39 2c 20 34 35 36 2c 20 34 35 35 2c 20 34 34 ... > <Buffer 2c 20 39 32 38 2c 20 39 33 36 2c 20 39 32 35 2c 20 39 32 32 2c 20 39 31 39 2c 20 39 31 39 2c 20 39 31 31 2c 20 39 31 38 2c 20 39 32 33 2c 20 39 31 31 ... > <Buffer 20 32 39 34 2c 20 33 30 33 2c 20 33 30 35 2c 20 33 31 32 2c 20 33 32 30 2c 20 33 31 33 2c 20 33 32 31 2c 20 33 33 32 2c 20 33 33 30 2c 20 33 33 39 2c ... > <Buffer 20 34 30 32 2c 20 34 30 33 2c 20 34 30 30 2c 20 34 30 33 2c 20 33 39 38 2c 20 34 30 32 2c 20 33 39 36 2c 20 33 39 35 2c 20 33 39 34 2c 20 33 39 35 2c ... > <Buffer 32 2c 20 35 32 30 2c 20 35 32 31 2c 20 35 32 35 2c 20 35 32 33 2c 20 35 32 39 2c 20 35 32 37 2c 20 35 32 30 2c 20 35 32 31 2c 20 35 31 38 2c 20 35 31 ... > <Buffer 34 34 38 2c 20 34 35 30 2c 20 34 35 32 2c 20 34 35 30 2c 20 34 34 39 2c 20 34 36 32 2c 20 34 35 35 2c 20 34 35 36 2c 20 34 36 31 2c 20 34 36 31 2c 20 ... >
$ node webServer.js Server running Connected correctly to server /post_data undefined:1 {"rot": [0.05797865190578781, 0.14626504446713978, 0.24377680370825847, 0.2879175175237291, 0.3247175016475997, 0.3592870672240511, 0.35229291442696364, 0.3743106845680993, 0.5184086788701646, 0.7947024316278122, 1.0613050206016947, 1.231086596277834, 1.3705734769806608, 1.5057159598547085, 1.6952540983680553, 1.9179674268678857, 2.0879730213689442, 2.1947508531672355, 2.328138367820332, 2.534036288734611, 2.7153817861134772, 2.882636365089708, 3.0622709507250607, 3.2583297081576053, 3.4832324180894227, 3.7081349169024986, 3.903078241202668, 4.064559588905509, 4.231661325192634, 4.411728995446941, 4.623425649322627, 4.883056187447702, 5.173931331124925, 5.445743486171461, 5.702388863527138, 5.9571903898515775, 6.218406606266517, 6.465453644745223, 6.683981580588654, 6.887620094168277, 7.098544097128715, 7.305028928145197, 7.511212026799908, 7.676446421455791, 7.852682668744152, 8.026358154893831, 8.191522745685722, 8.379527334038537, 8.64317570569861, 8.882942478165372, 9.081874454294452, 9.2671 SyntaxError: Unexpected end of JSON input at JSON.parse (<anonymous>) at IncomingMessage.<anonymous> (/home/hasegawa/デスクトップ/akiyama/Node.js/webServer.js:120:38) at IncomingMessage.emit (events.js:198:13) at IncomingMessage.Readable.read (_stream_readable.js:491:10) at flow (_stream_readable.js:957:34) at resume_ (_stream_readable.js:938:3) at process._tickCallback (internal/process/next_tick.js:63:19)

該当のソースコード

webServer.js

// 必要なファイルを読み込み var http = require('http'); var url = require('url'); var fs = require('fs'); var server = http.createServer(); //DB接続準備 const MongoClient = require('mongodb').MongoClient; const url_db = 'mongodb://localhost:27017'; // Connection URL const dbName = 'study'; // Database Name const client = new MongoClient(url_db,{useNewUrlParser: true}); const assert = require('assert'); var collection; var value; //rasberrypiとの接続準備 var https = require('https'); var url_json = 'https://api.atnd.org/events/?keyword_or=javascript&format=json'; var data_raspi = []; // http.createServerがrequestされたら、(イベントハンドラ) server.on('request', function (req, res) { // Responseオブジェクトを作成し、その中に必要な処理を書いていき、条件によって対応させる var Response = { //省略 "postData": function() { req.on('data', function(data) { data_json = JSON.parse(data); console.log("aaaaaaa"); console.log("typeof"); console.log(typeof(data_json)); }); } }; // urlのpathをuriに代入 var uri = url.parse(req.url).pathname; console.log(uri); // URIで行う処理を分岐させる if (uri === "/") { // URLが「IPアドレス/:1234/」の場合、"renderHTML"の処理を行う Response["renderHTML"](); return; } else if (uri === "/js/three.js-master/build/three.min.js") { // URLが「IPアドレス/:1234/js/three.js-master/build/three.min.js」の場合、"getThree"の処理を行う Response["getThree"](); return; } else if (uri === "/js/OrbitControls.js") { // URLが「IPアドレス/:1234/js/OrbitControls.js」の場合、"getOrbit"の処理を行う Response["getOrbit"](); return; } else if (uri === "/get_value") { // URLが「IPアドレス/:1234/get_value」の場合、"getThree"の処理を行う Response["getValue"](); return; } else if (uri === "/post_data") { // URLが「IPアドレス/:1234/post_data」の場合、"postData"の処理を行う Response["postData"](); }; }); // 指定されたポート(1234)でコネクションの受け入れを開始する server.listen(1234); console.log('Server running ');

raspi側

# coding: UTF-8 import requests import json with open('test2.json') as file: data = json.load(file) data = json.dumps(data) #print(data) url = 'http://***:1234/post_data' result = requests.post(url, data, headers={'Content-Type': 'application/json'}) print result.text

test2.json

{ "dist": [ 456, 442, //省略 362, 361 ], "rot": [ 0.05797865190578781, 0.14626504446713978, 0.24377680370825847, //省略 504.9457832856941, 505.0953250076933 ] }

試したこと

JSON.parse(data||"null")を試してみましたが、かわりませんでした。

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

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

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

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

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

guest

回答1

0

JSON.parseはSTRINGをJSONに変換するという認識ですが、よくわかりません。

JSON.parseで検索してください。
検索のやり方がわからないのであればそれを切り出して質問を立ててください。

JSON.parseで検索するとMDN web docsの解説が見つかると思います。

MDN web docsの解説がわからないのであればそれを切り出して質問を立ててください。

ここからはエスパー回答になりますがMDN web docsで躓くとしたらstringifyとの対応です。

JavaScript

1var obj={ 2 result: true, 3 count: 42 4}; 5 6var json2=JSON.stringify(obj); /* "{"result":true,"count":42}" を返す */ 7 8JSON.parse(json2); /* {result: true, count: 42}(objと同じ) を返す */

at IncomingMessage.<anonymous> (/home/hasegawa/デスクトップ/akiyama/Node.js/webServer.js:120:38)

120はエラーのあった行番号です。
行番号を辿ればどこでエラーが起きたかが分かるはずです。
あなたはプログラムに行番号を示されていないのでこちらではどこでエラーが起きたかわかりかねます。

(GitHubにプログラム全部を上げる等。teratailが行番号に対応すればいいのですが)

data_json = JSON.parse(data);

ここでエラーが起きていると思うならconsole.log(data)をやってdataを出力してください。
JSON.parseのインプットがわかっていればこちらでエラーを再現できます。

dataを出力するとbuffer形式になっていました。
stringで送ったのにbufferになっているのはどうしてでしょうか。

Node.jsのhttpモジュールを使っているからと思います。

こちらにあるサンプルを動かしてみたらbuffer形式になっていてbuffer.toString()によってstringになりました。

投稿2019/08/23 12:52

編集2019/08/26 17:29
querykuma

総合スコア777

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

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

aiai8976

2019/08/25 05:35

dataを出力するとbuffer形式になっていました。 stringで送ったのにbufferになっているのはどうしてでしょうか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.45%

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

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

質問する

関連した質問