YUI 3:Json
8590 ワード
もっと読む
JSON(JavaScript Object Notation)は、軽量級のデータ交換フォーマットです。読みやすいし、書きやすいし、機械の解析や生成もしやすいです。それはJavaScript(Standard ECMA-232 rd Edition-December 1999)のサブセットに基づいています。JSONは言語から完全に独立したテキスト形式を採用していますが、C言語家族のような習慣も使用しています。これらの特性はJSONを理想的なデータ交換言語にする。
JSONモジュール概要:
脚本をできるだけ小さくするために、JSONモジュールは以下のいくつかの部分に分けられています。
json-parse,json-strigify,json
JSON文字列を解析します。
json-strigify:jsオブジェクトをJSON文字列に変換します。
Json:上記両方を同時に実現します。
解析JSON文字列からローカルJS値まで
オプションの「reviver」パラメータを使用します。
注意名の値は正しいです。key——var
このオプションの2番目のパラメータは、Reviverの値が定義されていない場合、このkeyは無視されます。
evalを使用しない:
eval()関数は、ある文字列を計算し、JavaScriptコードを実行します。
参照:http://www.w3school.com.cn/js/jsref_eval.asp
JSONモジュールを使用するパーミッション方法はより安全である:
JSオブジェクトからJSON文字列を作成します。
JSオブジェクト(または任意の許容値)をJSON文字列に変換するために、Y.JSON.strigifyにオブジェクトを送り、リターン値を取得する。
ホワイトリストを使う:
シーケンス番号だけの固定された名前のサブセットのために、この関数は、stingifyの第二のパラメータとしてkey名配列を提供する。
カスタムの「replacer」を使用します。
フォーマットJSON出力:
JSON捕獲エラー
同じparseでも、stingifyはエラーをキャプチャする必要があります。
循環参照
Notes about current native JSON support
JSON(JavaScript Object Notation)は、軽量級のデータ交換フォーマットです。読みやすいし、書きやすいし、機械の解析や生成もしやすいです。それはJavaScript(Standard ECMA-232 rd Edition-December 1999)のサブセットに基づいています。JSONは言語から完全に独立したテキスト形式を採用していますが、C言語家族のような習慣も使用しています。これらの特性はJSONを理想的なデータ交換言語にする。
JSONモジュール概要:
脚本をできるだけ小さくするために、JSONモジュールは以下のいくつかの部分に分けられています。
json-parse,json-strigify,json
JSON文字列を解析します。
json-strigify:jsオブジェクトをJSON文字列に変換します。
Json:上記両方を同時に実現します。
解析JSON文字列からローカルJS値まで
YUI().use('json-parse', function (Y) {
var jsonString = '{"products":['+
'{"id":1,"price":0.99,"inStock":true,"name":"grapes"},'+
'{"id":2,"price":3.5,"inStock":false,"name":"passion fruit"},'+
'{"id":3,"price":2.5,"inStock":true,"name":"bananas"}'+
']}';
// JSON.parse jsonString JSON , 。
try {
var data = Y.JSON.parse(jsonString);
}
catch (e) {
alert("Invalid product data");
}
// JSON 。
for (var i = data.products.length - 1; i >= 0; --i) {
var p = data.products[i];
if (p.price < 1) {
p.price += 1; // Price increase!
}
}
});
オプションの「reviver」パラメータを使用します。
注意名の値は正しいです。key——var
このオプションの2番目のパラメータは、Reviverの値が定義されていない場合、このkeyは無視されます。
YUI().use('json-parse', function (Y) {
var jsonString = '{"products":['+
'{"id":1,"price":0.99,"inStock":true,"name":"grapes"},'+
'{"id":2,"price":3.5,"inStock":false,"name":"passion fruit"},'+
'{"id":3,"price":2.5,"inStock":true,"name":"bananas"}'+
']}';
// ,name bananas , price。
var currencySymbol = '$';
var reviver = function (key,val) {
if (key === 'inStock' && !val) {
return undefined;
} else if (val === 'bananas') {
return undefined;
} else if (key === 'price') {
val += val % 1 ? "0" : ".00";
var pIdx = val.indexOf('.');
val = pIdx ? "0" + val : val;
val = currencySymbol + val.substr(0,pIdx + 3);
}
return val;
};
// JSON, 。
try {
var data = Y.JSON.parse(jsonString,reviver);
}
catch (e) {
alert("Invalid product data");
}
// 。
alert(data.products.length); // 1
alert(data.products[0].price); // $0.99
});
evalを使用しない:
eval()関数は、ある文字列を計算し、JavaScriptコードを実行します。
参照:http://www.w3school.com.cn/js/jsref_eval.asp
JSONモジュールを使用するパーミッション方法はより安全である:
//
var data = eval('(' + shouldBeJsonData + ')');
//
var data = Y.JSON.parse(shouldBeJsonData);
JSオブジェクトからJSON文字列を作成します。
JSオブジェクト(または任意の許容値)をJSON文字列に変換するために、Y.JSON.strigifyにオブジェクトを送り、リターン値を取得する。
YUI().use("json-stringify", function (Y) {
var myData = {
troop : [
{ name: "Ashley", age: 12 },
{ name: "Abby", age:9 }
]
};
var jsonStr = Y.JSON.stringify(myData);
alert(jsonStr); // {"troop":[{"name":"Ashley","age":12},{"name":"Abby","age":9}]}
});
ホワイトリストを使う:
シーケンス番号だけの固定された名前のサブセットのために、この関数は、stingifyの第二のパラメータとしてkey名配列を提供する。
YUI().use("json-stringify", function (Y) {
var myData = {
troop : [
{ name: "Ashley", age: 12 },
{ name: "Abby", age:9 }
]
};
var jsonStr = Y.JSON.stringify(myData);
alert(jsonStr); // {"troop":[{"name":"Ashley","age":12},{"name":"Abby","age":9}]}
});YUI().use("json-stringify", function (Y) {
//
var records = [
{id:1, name: "Bob", age: 47, favorite_color: "blue"},
{id:2, name: "Sally", age: 30, favorite_color: "mauve"},
{id:3, name: "Tommy", age: 13, favorite_color: "black"},
{id:4, name: "Chaz", age: 26, favorite_color: "plaid"}
];
// id age;
var jsonStr = Y.JSON.stringify(records,["id","age"]);
alert(jsonStr);
// [{"id":1,"age":47},{"id":2,"age":30},{"id":3,"age":13},{"id":4,"age":26}]
});
カスタムの「replacer」を使用します。
YUI().use("json-stringify", function (Y) {
//
var records = [
{id:1, name: "Bob", birthdate: "2/27/1964", favorite_color: "blue"},
{id:2, name: "Sally", birthdate: "9/30/1983", favorite_color: "mauve"},
{id:3, name: "Tommy", birthdate: "3/11/1990", favorite_color: "black"},
{id:4, name: "Chaz", birthdate: "5/22/1975", favorite_color: "plaid"}
];
// id favorite_color , UTC 。
var replacer = function (key,val) {
// id favorite_color
if (key === 'id' || key === 'favorite_color') {
return undefined;
// UTC 。
} else if (key === 'birthdate') {
var d = new Date(),
bd = val.split('/');
d.setFullYear(bd[2],bd[0]-1,bd[1]);
d.setHours(0,0,0);
return d;
}
return val;
};
var jsonStr = Y.JSON.stringify(records,replacer);
alert(jsonStr);
// [{"name":"Bobby","birthdate":"1964-02-28T08:00:00Z"},{"name":"Sally","birthdate":"1983-09-30T07:00:00Z"},{"name":"Tommy","birthdate":"1990-03-11T08:00:00Z"},{"name":"Chaz","birthdate":"1975-05-23T07:00:00Z"}]
});
フォーマットJSON出力:
YUI().use('json-stringify', function (Y) {
var fam = {
family: "Franklin",
children: [ "Bob", "Emily", "Sam" ]
};
// : 。
var jsonStr = Y.JSON.stringify(fam,null,4);
alert(jsonStr);
/*
{
"family": "Franklin",
"children": [
"Bob",
"Emily",
"Sam"
]
}
*/
});
JSON捕獲エラー
同じparseでも、stingifyはエラーをキャプチャする必要があります。
循環参照
try {
// BOOM
Y.JSON.parse("{'this string': is, not_valid: ['J','S','O','N'] }");
}
catch (e) {
alert("A string may eval to the same object, but might not be valid JSON");
}
// This is safe to stringify
var myData = {
troop : [
{ name: "Ashley", age: 12 },
{ name: "Abby", age:9 }
]
};
// Create a cyclical reference
myData.troop[0]["NEWKEY"] = myData;
try {
// BOOM
jsonStr = Y.JSON.stringify(myData);
} catch (e) {
alert("Cyclical references can sneak in. Remember to wrap stringify.");
}
Notes about current native JSON support