JSON
JSON (JavaScript Object Notation) は、データの保存と表現にプログラミング言語から完全に独立したテキスト形式を使用する軽量のデータ交換形式です。
JSON が登場する前は、XML を使用してデータを転送していました (XML 翻訳は Extensible Markup Language であり、ネットワーク上のデータ転送に適したプレーン テキスト形式です)。しかし、XML がますます複雑になるにつれて、人々はより簡単なデータ交換形式を発明し始めました。 、最後に 2002 年に Douglas Crockford (Douglas Crockford) が JSON を発明しました。JSONは JavaScript のサブセットであることを覚えておく必要があります。JavaScriptで JSON を直接使用して、シリアル化と逆シリアル化の変更を実現できます。
まず、JSON のデータ型を見てください。これは基本的に JavaScript と同じです (太字に注意してください)。
型名 | 説明 |
---|---|
番号 | JavaScriptの数値と同じ数値型 |
ブール値 | ブール値、true と false の 2 つの値のみ |
弦 | 言うまでもなく文字列型ですが、「 」ではなく「 」を使用するように注意 |
ヌル | Null 値は何も意味しません |
配列 | 配列、[]で囲まれたデータ |
物体 | オブジェクトはJavaScriptのオブジェクトと同じで、それぞれ「 」を使用した{}を使用します。 |
/* JSON 标准格式:
{
"键名称1": 100,
"键名称2": "我是字符串,使用双引号",
"键名称3": true,
"键名称4": null,
"键名称5": [200, "数组中字符串", null],
"键名称6": {"对象健名称1": 200, "对象健名称2": "我也是字符串"}
} */
//看不懂怎么办(我书读的少,你别骗我),那我下面写一个例子就能明白了
'use strict'
let Mike = {
name: 'Mike',
age: 21,
school: "清华大学"
};
let obj = {
key1: 100,
key2: 'Hello world',
key3: false,
key4: null,
key5: [200, '300', [true, false]],
key6: Mike
};
/* 将 JavaScript 对象转换成 JSON 字符串,实现序列化:
JSON.stringify(value, replacer, space)
value: 待序列化的对象;
replacer: 控制如何筛选对象的键值,可以是函数或者数组(可选);
数组里可以放想要筛选的键值,例如["key1", "key2"],注意请使用 ' ' 或者 " "
函数就是处理键值,比方说可以在变成 JSON 字符串的时候把所有的英文键改成大写
space: 输出文本添加缩进、空格和换行符(可选)
就是让格式好看点 */
let obj_JSON = JSON.stringify(obj, null, '\n'); //使用一个空格填充
console.log(obj_JSON);
/* 将字符串变成 JavaScript 对象,实现反序列化
JSON.stringify(value, reviver)
value:待转换的字符串;
reviver:和 replacer 蛮像的,但是只能是函数(可选)*/
let obj_JS_object = JSON.parse(obj_JSON);
console.log(obj_JS_object);
コンソール出力:
重要な注意点:
- オブジェクト内の文字列に「 」が使用されていても、JSONに変換すると「 」になります。
- 各キーに「 」を追加します
実際、初心者はこれまでの知識ポイントをマスターするだけで十分です。以下は補足的な知識です。
/* 上边我们介绍了可以设置 stringify() 函数的 replacer 参数,在一定程度上控制序列化的结果
现在我们可以完全实现自定义序列化,那就是使用 toJSON() 函数:toJSON() 函数可以返回一个 JSON 字符串 */
/* 对于下面的 Book 对象,现在我只想序列化 name 和 price */
//1、通过设置 replacer 的方法
let Book = {
name: '入门 JavaScript',
ISBN: 12345678901234,
price: 99
};
let Book_JSON = JSON.stringify(Book, ["name", "price"]);
console.log("使用 replacer 实现自定义序列化 ↓↓↓");
console.log(Book_JSON);
//2、在 Book 对象内部重写 toJSON() 函数
let Book = {
name: '入门 JavaScript',
ISBN: 12345678901234,
price: 99,
//重写 toJSON() 函数,直接返回我们自定义的结果(只要符合格式要求,键值名字随便改,下面我就把首字母变成中文,但是尽量不要使用中文,这里只是为了示范)
toJSON: function () {
return {
"书名": "入门 JavaScript",
"价格": 99
}
}
};
let Book_JSON = JSON.stringify(Book);
console.log("重写 toJSON() 函数实现自定义序列化 ↓↓↓");
console.log(Book_JSON);
結果表示
toJSON() 関数がオーバーライドされると、 replacer パラメータも設定できなくなることに注意してください。優先事項として理解できる
それでは、最初に JSON について詳しく説明します。概念だけを理解してください。将来さらに使用する場合は、JSON についてよく理解できるようになります。