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

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

新規登録して質問してみよう
ただいま回答率
85.49%
Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

JSON

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

Q&A

解決済

3回答

2344閲覧

jsonデータの定義について「考察」

blossan

総合スコア154

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

JSON

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

1グッド

0クリップ

投稿2016/12/19 07:26

御世話になります。
jsonデータを扱うときに少し気になることがありました。今日はその疑問点について質問したいと思います。
それは、jsonデータとはどのようなデータかという定義についてです。
一般的にjsonデータとは、
{"":""}という形を意味していますと思います。

google apps script(javascrit系列の言語)で、以下のjsonデータをapiとして渡すことがありました。

json

1 var payload = { 2 "name": "Trafficvolume60", 3 "description": "Trafficvolume60", 4 "ruleConfig": { 5 "properties": { 6 "limitTotalTrafficMegaByte":100, 7 "inactiveTimeoutDateConst": "IMMEDIATELY" 8 }, 9 "type": "CumulativeTrafficRule" 10 }, 11 "actionConfigList": [ 12 { 13 "properties": { 14 "secretAccessKey": "秘密鍵", 15 "endpoint": "https://lambda.ap-northeast-1.amazonaws.com", 16 "accessKey": "認証鍵", 17 "functionName": "Trafficvolume60", 18 "executionDateTimeConst": "IMMEDIATELY", 19 }, 20 "type": "InvokeAWSLambdaAction" 21 } 22 ], 23 "status": "active", 24 "targetGroupId": "※※" 25 };

私は上記の形をjsonデータと認識していました。しかし、いざapiとしてデータをpostする際に、上記のデータをJSON.stringify(payload)、つまりjsonデータに変換していました。jsonデータをjsonデータに変換するというのは可笑しな話になりますが、上記のJSON.stringify(payload)という処理をしないと、結果的にapiは成功しませんでした。
つまり、上記のデータ構造は、jsonデータではなかったという結論になります。

そこで、jsonデータに渡す前のpayloadとJSON.stringify(payload)した後のデータを確認してみました。

json

1JSON.stringifyを通す前 2{actionConfigList=[{type=InvokeAWSLambdaAction, properties={secretAccessKey="秘密鍵", endpoint=https://lambda.ap-northeast-1.amazonaws.com, accessKey="認証鍵", functionName=Trafficvolume60, executionDateTimeConst=IMMEDIATELY}}], name=Trafficvolume60, description=Trafficvolume60, targetGroupId="※※", ruleConfig={type=CumulativeTrafficRule, properties={inactiveTimeoutDateConst=IMMEDIATELY, limitTotalTrafficMegaByte=100.0}}, status=active} 3

JSON.stringifyを通した後

json

1{"name":"Trafficvolume60","description":"Trafficvolume60","ruleConfig":{"properties":{"limitTotalTrafficMegaByte":100,"inactiveTimeoutDateConst":"IMMEDIATELY"},"type":"CumulativeTrafficRule"},"actionConfigList":[{"properties":{"secretAccessKey":"秘密鍵","endpoint":"https://lambda.ap-northeast-1.amazonaws.com","accessKey":"認証鍵","functionName":"Trafficvolume60","executionDateTimeConst":"IMMEDIATELY"},"type":"InvokeAWSLambdaAction"}],"status":"active","targetGroupId":"※※"}

その違いは、以下に挙げてみました。
0. - 各変数の並び替えに加え
0. - 「 」空白の有無
0. - ""の有無

私の見解では、jsonデータとは、各項目の間に空白がなく、各項目の並び替えがしてあり、尚且つ、""がない状態だと考えています。つまり、{"":""}で構成されているだけでは、jsonにならないということです。

あくまでapiがうまく通すことができた結果を基に考察をしています。
実際のjsonデータの定義について、皆様のご意見を伺いたいと思います。

hitsujimeeee👍を押しています

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

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

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

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

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

guest

回答3

0

まず、JSONとは、「JavaScriptの記法を使った、オブジェクトを文字列にするための記法」です。

JavaScriptのソースにvar obj = { ... };のように書いたものは、JavaScriptの世界での扱いはJavaScriptのオブジェクトであって、JSONではありません

投稿2016/12/19 07:31

maisumakun

総合スコア145183

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

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

0

ベストアンサー

JSONオブジェクトとJSON文字列を混同しているようですね。

JSONについては
RFC 7159で定義されています。考察するならこれを読んでからがいいですよ。

投稿2016/12/19 08:12

yona

総合スコア18155

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

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

0

JavaScript オブジェクトと JSON 文字列の違いは理解されていますよね?

質問は API に渡すときどちらを渡すのが正しいかということですか? それは API の仕様によって異なる話で、どちらが正解と言うことはないです。

例えば、jQuery.ajax の data に渡す場合、

(1) GET 要求(クエリ文字列としてデータを送信)の場合は JavaScript オブジェクト
(2) POST 要求(コンテンツとしてデータを送信)の場合は JSON 文字列

ということになります。詳しくは以下の記事を見てください。

jQuery.ajax の data の型
http://surferonwww.info/BlogEngine/post/2015/10/05/what-must-be-set-to-data-option-in-jquery-ajax.aspx

質問者さんの使っている API が何だか分かりませんが、

上記のJSON.stringify(payload)という処理をしないと、結果的にapiは成功しませんでした。

ということですので、API の仕様として、渡すのは JSON 文字列でなければならないということに過ぎないと思います。

投稿2016/12/19 08:06

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問