仮に下記のようなJSOnデータが存在する場合、和名の項目を指定して取得してもよろしいのでしょうか?
ルール?規約のようなものがよくわからず、ご質問させてください。
例:
{ユーザネーム: "ユーザネーム"
メールアドレス: "メールアドレス"}
var sample = jsonオブジェクト.ユーザネーム
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答1件
0
ベストアンサー
結論から言うと、キー名に日本語文字列を使っても問題ありません。
まぁ、JavaScript上でソースコード書く人が面倒になるので、
慣習として使ってない現場の方が多いと思います。
どうしてそうなるのか、
その流れを下に纏めておきました。
抜け漏れがあるかもしれないので出来れば問題ないことを確認してください。
{ユーザネーム: "ユーザネーム"
メールアドレス: "メールアドレス"}
JSONは人間が読む事は考慮したファイルフォーマットだが、
エディタ開いて頑張って書くべきではないものというのが私の考えです。
例えばJavaScriptではダブルクォートで括らないキー名は許されますが、
JSONでは許されませんので、それはJSONとしては不正です。
このキー名をしっかりダブルクォートで括らなければならない制約が
JSONの使い勝手をかなり悪くしています。
まぁ、下記で紹介するシンプルなルールを適用した結果そうなったという感じになります。
JSONの公式サイトはこんな感じ
2nd edition, December 2017
ダウンロードリンクを開くと仕様をPDFで表現したものがダウンロードできる
このECMA-404 (2nd)のObjectから引用してきます。
A conforming JSON text is a sequence of Unicode code points that strictly conforms to the JSON grammar defined by this specification.
和訳: 準拠するJSONテキストは、この仕様で定義されているJSON文法に厳密に準拠する一連のUnicodeコードポイントです。
文字コードはUnicodeで記載してねと書いてあります。
Unicodeを使えば日本語を取り扱っても良いってことですね。
肝心のObjectに関しての記述を見ていきましょう。
An object structure is represented as a pair of curly bracket tokens surrounding zero or more name/value pairs.
A name is a string. A single colon token follows each name, separating the name from the value.
A single comma token separates a value from a following name.
和訳: オブジェクト構造は、0個以上の名前/値のペアを囲む中括弧トークンのペアとして表されます。
名前は「String」です。単一のコロントークンが各名前の後に続き、名前と値を区切ります。
単一のコンマトークンは、値を次の名前から区切ります。
Objectに関してはこれがルールの全てです。
{name: value}
で記述されており、name
の部分はString型でなければなりません。
ルールはそれだけ、シンプルですが鉄の掟でもあります。
じゃあStringってなんやねんということでStringの定義を見ていきます。
A string is a sequence of Unicode code points wrapped with quotation marks (U+0022).
和訳: Stringは、ダブルクォートで囲まれたUnicodeコードポイントのシーケンスです。
Stringはダブルクォートで始まり、ダブルクォートで閉じる表記です。
中身はUnicodeの0文字以上の集合体で記述してください。
こんな感じの事が書いてありますね。
コードポイントというのが1文字を指しており、
シーケンスが1文字の集合体ということを示しています。
(JavaScriptではStringは配列みたいな挙動をする箇所があり、Stringや配列をひっくるめてシーケンスと呼んだりする事もあります)
2行目以降にダブルクォート内でダブルクォートが使いたくなったらどうすんねん的な、
エスケープ文字のルールの記載等がありますが
今回の質問は「日本語がキー名として使えるのか否か」なので飛ばすとして、
これが大体仕様の全体像となります。
別の切り口も見ていきましょうか。
参考記事: 事実上最後のJSON仕様「RFC 8259」と「ECMA-404 2nd Editon」公開。UTF-8エンコード必須に - Publickey
こちらの記事がJSONの仕様の歴史として良い感じにまとまっていました。
JSON text exchanged between systems that are not part of a closed ecosystem MUST be encoded using UTF-8 [RFC3629].
和訳: クローズドなエコシステムの一部ではないシステム同士でのJSONによるテキストの交換は「UTF-8」を用いてエンコードされなければならない。
目を引いたのはこのくらいですね。
Unicodeの実装の一つであるUTF-8を利用しなさいという感じで覚えれば良いと思います。
「日本語を扱いたい」という視点で考えた際、
UTF-8にはまだ定義されていないレアな漢字があったような?
そういう文字は使えないかもしれませんが、そのくらいですかね。
まとめとしては
- Objectのキー名はStringである(ダブルクォートの省略も許さない)
- StringはUnicode(UTF-8)の0文字以上をダブルクォートで包んだものである
このルールしかない以上、
別にObjectのキー名(name)に日本語だろうがロシア語だろうが何を使っても問題ありません。
もし不都合があって使わせたくないのであれば、
「ASCII文字列にしなさい」だとか「a-zA-Z0-9」等の正規表現的な事が書かれているはずです。
そういう記載が見つからないということは大丈夫ってことです。
投稿2021/11/21 17:04
総合スコア21203
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/11/21 18:41
2021/12/02 09:49