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

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

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

ASCIIは、米国規格協会(ANSI)が制定したコンピューターの情報交換のための文字コードの一つ。アルファベットや数字などを1文字当たり7ビットで表します。英数字を表示する文字コードの中で最も高い互換性を持ち、多くの通信機器に利用されています。

JSON

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

ソケット

TCP/IPにおいて、IPアドレスとサブアドレスであるポート番号を組み合わせたネットワークアドレスのことを呼びます。また、ソフトウェアアプリケーションにおいて、TCP/IP通信を行う為の仮想的なインターフェースという意味もある。

JavaScript

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

Q&A

解決済

1回答

1708閲覧

ソケット通信で送られたJSONデータを、ASCIIではなくJSONフォーマットで受信したい

yamekodev

総合スコア17

ASCII

ASCIIは、米国規格協会(ANSI)が制定したコンピューターの情報交換のための文字コードの一つ。アルファベットや数字などを1文字当たり7ビットで表します。英数字を表示する文字コードの中で最も高い互換性を持ち、多くの通信機器に利用されています。

JSON

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

ソケット

TCP/IPにおいて、IPアドレスとサブアドレスであるポート番号を組み合わせたネットワークアドレスのことを呼びます。また、ソフトウェアアプリケーションにおいて、TCP/IP通信を行う為の仮想的なインターフェースという意味もある。

JavaScript

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

0グッド

0クリップ

投稿2020/06/30 02:35

編集2020/06/30 02:44

JSONデータを下記のように準備し、

Javascript

1 var json_asocc = 2 [ 3 { 4 'maker' : 'Rover', 5 'model' : 'MINI', 6 'grade' : 'Cooper 35th Anniversary' 7 } 8 ]; 9 10 //JSONにエンコード 11 var json_text = JSON.stringify(json_asocc); 12 sendData = json_text;

prmに入れ、下記のように送信し、

javascript

1client = new net.createConnection(sndPort, host) 2 .on('connect', function() { 3 try { 4 client.write(prm) 5 client.destroy(); 6 resolve(); 7 } catch(error) { 8 client.destroy(); 9 reject(); 10 }

下記のように受信しています。

Javascript

1const http2 = require('http'); 2var server = http2.createServer(); 3var rcvPort = 7000; 4 5 server.listen(rcvPort); 6 7 server.on('connection', (sock) => { 8 console.log('sock connected'); 9 10 sock.on('data', function(data){ 11 console.log(' received '+data.length+'bytes'); 12 console.log(data); 13 console.log(JSON.stringify(data)); 14 for (var i=0; i<data.length; i++) { 15 console.log(String.fromCharCode(JSON.stringify(data[i]))); 16 } 17 }); 18 19 sock.on('close', function(){ 20 console.log('sock connection closed'); 21 });

このとき、受信側のコンソール出力は下記のようになります。

<Buffer 5b 7b 22 6d 61 6b 65 72 22 3a 22 52 6f 76 65 72 22 2c 22 6d 6f 64 65 6c 22 3a 22 4d 49 4e 49 22 2c 22 67 72 61 64 65 22 3a 22 43 6f 6f 70 65 72 20 33 ... 18 more bytes> {"type":"Buffer","data":[91,123,34,109,97,107,101,114,34,58,34,82,111,118,101,114,34,44,34,109,111,100,101,108,34,58,34,77,73,78,73,34,44,34,103,114,97,100,101,34,58,34,67,111,111,112,101,114,32,51,53,116,104,32,65,110,110,105,118,101,114,115,97,114,121,34,125,93]} [ { " m a k e r " : " R o v e r " , "

受信側で受信したデータがすべてASCIIになっています。

このデータをJSONとして扱うためには、ダブルクォーテーション、カンマなどを頼りにして泥臭く自力で変換する必要があるのでしょうか?
それともこれをJSONとして扱うor変換する方法はあるでしょうか?

もしくはjson形式で送受信をしたければ、下記のようにXMLHttpRequestオブジェクトを使用しなければならないのでしょうか?
http://www.fineblue206.net/archives/677

初歩的な質問で申し訳ありませんが、教えていただけると幸いです。よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

それともこれをJSONとして扱うor変換する方法はあるでしょうか?

はい、data.toString()で文字列を回収してからJSON.parseすればいいだけかと思います。

投稿2020/06/30 02:45

maisumakun

総合スコア146018

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

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

yamekodev

2020/06/30 03:07

初歩的過ぎてなかなか解決できずハマっていました。 ありがとうございました。助かりました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問