ホームページ  >  記事  >  ウェブフロントエンド  >  jsonオブジェクトをstring_javascriptに変換する方法

jsonオブジェクトをstring_javascriptに変換する方法

WBOY
WBOYオリジナル
2016-05-16 17:47:301052ブラウズ
背景: ほとんどのブラウザーは、json オブジェクトを文字列に変換するためのネイティブ API サポートを実装しています。では、皆さんがよく使う IE6 などの下位バージョンのブラウザーにそれを実装するにはどうすればよいでしょうか。
まず、次のメソッドを実行して、さまざまな状況下で JSON.stringify の出力をテストします。これは、次のコードの実装とテストに役立ちます。ユースケースは完了していない可能性があります。追加を歓迎します
コードをコピー コードは次のとおりです:

function test_toStringify(){
var result = {
"JSON.stringify(未定義)": JSON.stringify(未定義),
"JSON.stringify(null)": JSON.stringify(null) )、
"JSON .stringify(123)": JSON.stringify(123)、
"JSON.stringify(true)": JSON.stringify(true)、
"JSON.stringify('' )": JSON.stringify( '')、
"JSON.stringify('abc')": JSON.stringify('abc')、
"JSON.stringify(null)": JSON.stringify( null)、
"JSON.stringify([1,2,3])": JSON.stringify([1,2,3])、
"JSON.stringify([未定義, 未定義])": JSON.stringify([未定義, 未定義]),
"JSON.stringify({名前:'chyingp', 年齢:24, u:未定義})": JSON.stringify({名前:'chyingp', 年齢: 24、u:未定義})
};
var str = '';
for(結果の var key){
if(typeof result[key] === 'string'){
str = key " : '" result[key] "'n";
}else{
str = key " : " result[key] "n";
console.log( str);
}
test_toStringify();


出力結果は次のとおりです:


JSON.stringify(unknown) : 未定義
JSON.stringify(null) : 'null'
JSON.stringify(123) : '123'
JSON.stringify(true) : 'true'
JSON.stringify('') : '""'
JSON.stringify('abc' ) : '"abc"'
JSON.stringify ([1,2,3]) : '[1,2,3]'
JSON.stringify([未定義, 未定義]) : '[null, null]'
JSON.stringify({name: 'chyingp', age:24, u:unknown}) : '{"name":"chyingp","age":24}'


以下は、json オブジェクトを文字列に変換するコード実装です:


function is_number(obj){ return Object.prototype.toString.call(obj)==='[オブジェクト番号]'; }
function is_boolean(obj){ return Object.prototype.toString .call(obj)==='[オブジェクト ブール値]'; }
function is_string(obj){ return Object.prototype.toString.call(obj)==='[オブジェクト文字列]'; }
function is_null(obj){ return Object.prototype.toString.call(obj)= =='[object Null]'; }
function is_unknown(obj){ return Object.prototype.toString.call(obj)== ='[オブジェクト未定義]'; }
関数 is_object(obj){ return Object.prototype.toString.call(obj)==='[オブジェクト オブジェクト]' }
関数 is_array(obj){ return Object.prototype.toString.call(obj)==='[オブジェクト配列] '; }
function is_function(obj){ return Object.prototype.toString.call(obj)==='[オブジェクト関数]' ; }
function quote(str){ return '"' str '" '; }
var Basic_map = {
'[オブジェクト未定義]': true,
'[オブジェクト番号]': true,
'[object Null]': true,
' [object Boolean]': true
}
function Basic_type(obj){ return Basic_map[ Object.prototype.toString.call(obj) ) ]; }
JSON = window.JSON ||
//実際には、これは JSON.stringify
JSON.toStr = function(obj){
if(is_string(obj) ) || is_null(obj) || is_boolean(obj)) return quote(obj);
if(is_array(obj))
var left = "[",
middle = [],
right = "]",
value;
var callee = argument.callee; 0,len=obj.length; ivar value = obj[i];
if( typeof value === 'unknown' ){
middle.push(null ' ');
}else{
if( Basic_type(value) ){
middle.push( value )
}else{
middle.push( callee(obj[i]) )
}
}
}
return left middle.join( ",") right;
}
if(is_object(obj)){
var left = "{ ",
middle = [],
right = "}",
value;
var callee = argument.callee;
for(var key in obj){
var value = obj[キー];
if(obj[キーのタイプ] === '未定義') 続行;
if(basic_type(value) ){
middle.push(quote(key) ':'値 );
}else{
middle.push( quote(key) ' :' callee(value) );
}
}
return left middle.join(', ') right;
}
};
!JSON.stringify && (JSON .stringify = JSON.toStr);


上記のコードは練習用です。冗長性と効率性の問題。間違いがある場合は、ご指摘ください:)
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。