It was written by someone else. I have forgotten the source for a long time. Sometimes I will use it again.
Function Json2string (strobject ){
VaR C, I, L, S = '' , V, P;
Switch ( Typeof Strobject ){
Case ' Object ' :
If (Strobject ){
If (Strobject. Length && Typeof Strobject. Length = ' Number ' ){
For (I = 0 ; I < Strobject. length; ++ I ){
V = Json2string (strobject [I]);
If (S ){
S + = ' , ' ;
}
S + = V;
}
Return ' [ ' + S + ' ] ' ;
} Else If ( Typeof Strobject. tostring ! = ' Undefined ' ){
For (I In Strobject ){
V = Strobject [I];
If ( Typeof V ! = ' Undefined ' && Typeof V ! = ' Function ' ){
V = Json2string (v );
If (S ){
S + = ' , ' ;
}
S + = Json2string (I) + ' : ' + V;
}
}
Return ' { ' + S + ' } ' ;
}
}
Return ' Null ' ;
Case ' Number ' :
Return Isfinite (strobject) ? String (strobject ): ' Null ' ;
Case ' String ' :
L = Strobject. length;
S = ' " ' ;
For (I = 0 ; I < L; I + = 1 ){
C = Strobject. charat (I );
If (C > = ' ' ){
If (C = ' \\ ' | C = ' " ' ){
S + = ' \\ ' ;
}
S + = C;
} Else {
Switch (C ){
Case ' \ B ' :
S + = ' \ B ' ;
Break ;
Case ' \ F ' :
S + = ' \ F ' ;
Break ;
Case ' \ N ' :
S + = ' \ N ' ;
Break ;
Case ' \ R ' :
S + = ' \ R ' ;
Break ;
Case ' \ T ' :
S + = ' \ T ' ;
Break ;
Default :
C = C. charcodeat ();
S + = ' \ U00 ' + Math. Floor (C / 16 ). Tostring ( 16 ) +
(C % 16 ). Tostring ( 16 );
}
}
}
Return S + ' " ' ;
Case ' Boolean ' :
Return String (strobject );
Default :
Return ' Null ' ;
}
}