東南アジアの太陽が降り注ぐビーチでは、貝殻や工芸品など、思わず目を奪われるような魅力的な商品が見つかることがあります。しかし、言葉の壁が商品購入の妨げになることもあります。ジェスチャーを使用したり、コミュニケーションをとるためにさまざまな方法を試したりする必要がありました。幸いなことに、人々は、砂に足を突っ込んで数字を描くという、相互に受け入れられる情報交換方法である原始的なコミュニケーション手法を発見しました。
商人はビーチで商品の価格を注意深く地図に落とし込み、観光客は注意深く観察して自分の希望をグラフで表現します。商人が同意する場合は、うなずいたり身ぶり手ぶりを使って同意を表明しますが、同意しない場合は、描かれた数字を消去し、心理的価格を表すために新しい数字を使用します。数回のやり取りの後、両者は価格について徐々に合意に近づき、最終的には合意に達しました。これは楽しくて効率的でした。
プログラミングにおいて、双方がスムーズに情報を伝達するためには、情報交換の方法について合意する必要があります。中でも JSON は、軽量で読みやすいデータ形式として、ビーチで数字を描くようなもので、フロントエンドとバックエンドの情報のやりとりの暗黙の手段となっています。合意された JSON データ構造を通じて、要求側と応答側はより効率的に情報を交換し、シームレスな情報送信を実現できます。
JSON は情報交換に使用されるデータ形式です。
一般的なデータ対話形式
一般的なデータ対話形式には、プレーン テキスト、XML、JSON などのさまざまな構造が含まれます。これらの違いを見てみましょう。
1. プレーンテキスト形式
● 縦棒区切り(名前|性別|住所|年齢|携帯電話番号)
张三|男|沙阳路18号北京科技职业学院内|23|13333335555
婉儿|女|大连设计城901|22|13333336666
● カンマ区切り(名前、性別、住所、年齢、携帯電話番号)
张三,男,沙阳路18号北京科技职业学院内,23,13333335555
婉儿,女,大连设计城901,22,13333336666
2.XML形式
<students>
<student>
<name>张三</name>
<gender>张三</gender>
<addr>沙阳路18号北京科技职业学院内</addr>
<age>23</age>
<phone>13333335555</phone>
</student>
<student>
<name>张三</name>
<gender>张三</gender>
<addr>沙阳路18号北京科技职业学院内</addr>
<age>23</age>
<phone>13333335555</phone>
</student>
</students>
3.JSON形式
{
"students": [
{
"name": "张三",
"gender": "张三",
"addr": "沙阳路18号北京科技职业学院内",
"age": 23,
"phone": "13333335555"
},
{
"name": "张三",
"gender": "张三",
"addr": "沙阳路18号北京科技职业学院内",
"age": 23,
"phone": "13333335555"
}
]
}
各種フォーマットの比較
1. テキスト形式
a. 利点: コンテンツが簡潔で、データ送信が少ない
b. デメリット 1: 複雑なビジネスの変化に対応できない (例: バックエンドで電話機が切り替わり、データが調整されないとフロントエンドが混乱する)
c. 欠点 2: 階層構造をサポートしていないため、階層構造については後述します。
d. 欠点 3: データに縦線が含まれている場合、解析時にデータが混乱します。たとえば、「Zhang San|男性|3 号|男性|北京職業科学大学沙陽路 18 号」の住所情報は、 and Technology - Service Building 2|3|4th Floor|23|13333335555」、解析するとさらに多くのフィールドが表示されます
2.xml形式
a. 利点 1: 形式が明確で、順序を調整でき、バックエンドの新しい項目がフロントエンドに影響を与えません。
b. メリット 2: 階層構造をサポート
c. メリット3:データ内容がラベルと同じ場合にエスケープ可能
原文:“<addr>中国>北京>昌平>沙河>千锋教育</addr>”
转义为:“<addr>中国>北京>昌平>沙河>千锋教育</addr>”
d. 欠点 1: データ送信量がテキストの数倍と多く、属性説明フィールドには開始タグと終了タグが必要です (例: "<name>Zhang San</name>")。
3.JSON形式
a. 利点 1: 形式が明確で、順序を調整でき、バックエンドの新しい項目がフロントエンドに影響を与えません。
b. メリット 2: 階層構造をサポート (後述)
c. メリット3:データ内容がラベルと同じ場合にエスケープ可能
原始内容:"addr":"中国北京昌平沙河"千锋教育""
转义后:"addr":"中国北京昌平沙河\"千锋教育\""
d. 利点 4: データ送信量が適切であり、属性説明フィールドに終了タグが必要ありません (例: "name:"Zhang San"")。
JSON について詳しく説明しますか?
JSON、つまり JavaScript Object Notation は、文字通り js オブジェクト タグに変換されます。構造化データを表すためのキーと値のペアで構成される軽量のデータ交換形式です。
さて、本題ですが、単刀直入に言うと、JSONはjsのオブジェクトデータ型を発展させたもので、あるオブジェクトの属性や値を記述するために使用される、より優れた構造を持っています。送信を容易にするために、このデータを文字列に変換します、ねえ、ここにありますか? js オブジェクトのデータ型は次のとおりです。
//某个人
const person= {
name:'张三',
age:19,
phone:'13333335555',
addr:'国家省市县'
}
//省市县的对象,树状的层级结构
const addr = {
"name": "中国",
"type": "country",
"children": [
{
"name": "北京市",
"type": "province",
"children": [
{
"name": "北京市",
"type": "city",
"children": [
{ "name": "东城区", "type": "county" },
{ "name": "西城区", "type": "county" },
{ "name": "朝阳区", "type": "county" },
{ "name": "海淀区", "type": "county" }
]
}
]
},
{
"name": "上海市",
"type": "province",
"children": [
{
"name": "上海市",
"type": "city",
"children": [
{ "name": "黄浦区", "type": "county" },
{ "name": "徐汇区", "type": "county" },
{ "name": "闵行区", "type": "county" },
{ "name": "宝山区", "type": "county" }
]
}
]
}
]
}
ただし、これは js のオブジェクト データ型であり、基本的にデータをメモリに格納するためのデータ型であり、メモリをバックグラウンドに転送することは不可能です。
メモリが転送できない場合は、文字列に転送します。オブジェクトのデータ型の構造に合わせて、文字列形式に変更されます。county const addr) を実行するだけなので、次のように変更しました。
let addrJSONString = `{
"name": "中国",
"type": "country",
"children": [
{
"name": "北京市",
"type": "province",
"children": [
{
"name": "北京市",
"type": "city",
"children": [
{ "name": "东城区", "type": "county" },
{ "name": "西城区", "type": "county" },
{ "name": "朝阳区", "type": "county" },
{ "name": "海淀区", "type": "county" }
]
}
]
},
{
"name": "上海市",
"type": "province",
"children": [
{
"name": "上海市",
"type": "city",
"children": [
{ "name": "黄浦区", "type": "county" },
{ "name": "徐汇区", "type": "county" },
{ "name": "闵行区", "type": "county" },
{ "name": "宝山区", "type": "county" }
]
}
]
}
]
}`
//注意,我使用了反引号,这样的数据字符串可以换行
JSONの構成
● 中括弧 {}: オブジェクトの始まりと終わりを示すために使用され、オブジェクトは順序付けされていないキーと値のペアのセットで構成されます。
● 角括弧 []: 配列の始まりと終わりを示すために使用され、配列は順序付けられた値のグループで構成されます。
● コロン:: キーと値を区切って、キーを対応する値に関連付けるために使用されます。
● カンマ:: 配列またはオブジェクト内の異なるキーと値のペアまたは値を区切って、それらを区切るために使用されます。
● 二重引用符 " または一重引用符 ': 文字列を囲み、文字列の始まりと終わりを示すために使用されます。
● バックスラッシュ \: 特殊文字を正しく解析するために特殊文字をエスケープするために使用されます。
最後まで書き上げる: JSON の優雅さ
● データサイズ:通常、JSON は XML よりも小さくなります。JSON は簡潔な構文を採用しており、XML のように多数のタグや属性を追加する必要がないため、JSON のデータ量は比較的小さくなります。これにより、JSON がネットワーク送信で消費する帯域幅が減り、データ送信の効率が向上します。
● 構文の複雑さ:それに比べて、XML の構文は比較的複雑です。XML ではデータをラップするために開始タグと終了タグを使用する必要がありますが、JSON ではオブジェクトと配列を表すために中括弧 {} と角括弧 [] のみを使用する必要があります。これにより、JSON 構文がより簡潔で読みやすくなります。
● 解析効率: JSON の構文は比較的単純であるため、通常、解析速度は XML よりも高速です。これは、特にリアルタイム応答が必要なアプリケーション シナリオにおいて、大規模データの処理と分析にとって非常に重要です。
● 互換性: JSON はフロントエンドとバックエンドの間で優れた互換性を持っています。ほとんどすべての主流のプログラミング言語には JSON 解析およびシリアル化ライブラリがあり、これにより JSON はフロントエンドとバックエンドの対話にとってより便利になります。
● 可読性: JSON は XML よりも読み書きが容易です。JSON の構造は JavaScript オブジェクトに似ているため、開発者はデータ構造をより直観的に理解し、デバッグと開発を容易にできます。
● スケーラビリティ:一部の特定の分野では XML の方がスケーラビリティが優れていますが、一般的なツリー データ構造には JSON のスケーラビリティで十分です。JSON は、ネストされたオブジェクトと配列をサポートしており、複雑なデータ構造を柔軟に表現できます。
要約すると、JSON には、州、市、郡、自動車などのツリー状のデータ構造を扱う場合に、データ量が小さく、構文が簡潔で、解析効率が速く、互換性が高いという利点があります。これらの利点により、JSON はツリー データ構造の処理に推奨されるデータ形式となり、特に最新の Web アプリケーションやモバイル アプリケーションで広く使用されています。ただし、より複雑な構造や強力なスケーラビリティが必要なシナリオなど、一部の特定のニーズでは、依然として XML の方が適切な選択肢となる場合があります。
- 終わり -