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

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

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

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

Node.js

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

JavaScript

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

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

Q&A

解決済

3回答

2917閲覧

jsにてJSONデータを取得後の取り扱い方

ShoSakata

総合スコア20

JSON

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

Node.js

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

JavaScript

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

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

0グッド

0クリップ

投稿2019/01/09 08:11

前提・実現したいこと

node.js(サーバーサイド)からjs(フロントサイド)へJSONデータを送ったのち、JSONデータのvalueを取り出したいです。

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

ajaxのデータのdataに+を使って作成した{"karui":"01"}と+を使わず、そのまま{"karui":"01"}をセットした場合で
node.jsから受け取る値が異なります。01は変数にしたいため、+を使いたいです。
+を使う場合、node.jsから受け取る値{{"karui":"01"}: ""}
+を使わない場合、node.jsから受け取る値{"karui":"01"}

型などが変わって受け取る値がことなるのでしょうか。

下記のコードは変数をセットした際のコードです。

js

1$(function(){ 2 $("#searchBtn").click(function(){ 3 var first = true; 4 var per_page = 5; 5 var page_no = 1; 6 var page_range = 5; 7 var ajax_data; 8 ajax_data = '{'+'"karui":'+"01"+'}';//ここに{"karui":"01"}を記載するとnode.jsから受け取る値がことなります。 9 $.ajax({ 10 async: false, 11 url: 'http://localhost:8000/tutor-search-server.js', 12 type: 'POST', 13 data: ajax_data, 14 dataType: 'json' 15 }).done(function(res){ 16 console.log(res); 17 console.log(res['karui']); 18 }).fail(function(xhr, status, error){ 19 alert(status); 20 console.log("XMLHttpRequest : " + xhr.status); 21 console.log("textStatus : " + status); 22 console.log("errorThrown : " + error); 23 24 }); 25 26 }); 27 28 });

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

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

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

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

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

azuapricot

2019/01/09 08:16

'{'+'"karui":'+"01"+'}' このダブルクォーテーション判定されてるのか気になるのですが、 エスケープ処理とかしてみました?
papinianus

2019/01/09 08:29

クライアントからサーバにpostして、それをそのまま受け取っているということでしょうか?
ShoSakata

2019/01/09 09:20

>azuapricotさん ご質問ありがとうございます。以下のようにescape文字を打ったところ、「{{¥"karui¥":¥"01¥"}: ""}」の値となり、{'"karui":"01"'}となりませんでした。 「ajax_data = '{'+'¥"karui¥":'+'¥"01¥"'+'}';」 >papinianusさん ご質問ありがとうございます。 はい、そのまま受け取るように書いています。
guest

回答3

0

JSON.stringify()を使ってみてはどうでしょうか。

送信側でJSON.stringify()、受信側でJSON.parse()します。

javascript

1var ajax_data = JSON.stringify({"karui":"01"});

投稿2019/01/09 09:57

shozi3

総合スコア691

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

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

shozi3

2019/01/09 10:01

あ、解決済でしたか。 失礼しました。
guest

0

自己解決

文字列からJSONに変換することで、'{'+'"karui":'+'"01"'+'}'も{"karui":"01"}で受け取ることができました。具体的には下記の①を②に変えています。
①:ajax_data = '{'+'"karui":'+'"01"'+'}';
②:ajax_data = JSON.parse('{'+'"karui":'+'"01"'+'}');

投稿2019/01/09 09:55

ShoSakata

総合スコア20

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

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

0

+でつなげた記法とそうでない時ではajax_dataに格納される値が異なるからではないでしょうか。

+あり

JavaScript

1var ajax_data = '{'+'"karui":'+"01"+'}'; 2console.log(ajax_data); 3//=>{"karui":01}

+なし

JavaScript

1var ajax_data = '{"karui":"01"}'; 2console.log(ajax_data); 3//=>{"karui":"01"}

+でつなげる記法の+"01"+の部分を+'"01"'+に変更すると、
(格納される値が同じものになるので)同じ結果になるのではないかと。

追記
ちなみにですが、01にあたる部分を変数にしてかつ、
+でつなげない時のような結果を得たいのであれば、以下のような感じになるかと。

JavaScript

1var hoge = "01"; 2var ajax_data = '{"karui":"'+hoge+'"}'; 3console.log(ajax_data); 4//=>{"karui":"01"}

投稿2019/01/09 08:20

編集2019/01/09 08:29
madoka9393

総合スコア992

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

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

ShoSakata

2019/01/09 09:14

ご回答ありがとうございます。+'"01"'+を試したところ、受け取った値が{"karui":"01"}: ""}となり、同一結果になりませんでした。
madoka9393

2019/01/09 10:10

お役に立てず申し訳ないです…。 元のデータ(シングルクォートが付いていないもの)でJSON.parseした際にどういう挙動になるのか気になりますね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問