parse用于从一个字符串中解析出json对象
var str = '{"name":"张飞","age":"23"}'
结果:
JSON.parse(str)
- age: "23"
- name: "张飞"
- __proto__: Object
注意:单引号写在{}外,每个属性名都必须用双引号,否则会抛出异常。
stringify()用于从一个对象解析出字符串,如
var a = {a:1,b:2}
结果:
JSON.stringify(a)
"{"a":1,"b":2}"
//字符串转对象
function str2obj(json){
return eval("(" + json + ")");
}
//对象转字符串
function obj2str(o, flag, replace){
var arr_start = "ARRAY_S";
var arr_end = "ARRAY_E";
if (flag == null) {
flag = "\"";//默认是双引号
}
if (replace == null) {
replace = true;
}
var r = [];
if (typeof o == "string" || o == null) {
return o;
}
//alert(typeof(o));
if (typeof o == "object") {
//alert(o.sort);
if (!o.sort) {
//alert("in if");
r[0] = "{";
for (var i in o) {
//alert(i+"="+o[i]);
r[r.length] = flag;
r[r.length] = i;
r[r.length] = flag;
r[r.length] = ":";
r[r.length] = flag;
r[r.length] = obj2str(o[i], flag, false);
r[r.length] = flag;
r[r.length] = ",";
}
r[r.length - 1] = "}";
}
else {//数组元素
r[0] = arr_start;
for (var i = 0; i < o.length; i++) {
r[r.length] = flag;
r[r.length] = obj2str(o[i], flag, false);
r[r.length] = flag;
r[r.length] = ",";
}
r[r.length - 1] = arr_end;
}
var str = r.join("");
//alert("结果:"+str);
//针对{} 就是没有属性的对象,会返回单个 },把它补齐
if (str == "}") {
str = "{}";
}
//针对[] 就是长度为0的数组,会返回单个 ],把它补齐
if (str == arr_end) {
str = arr_start + arr_end;
}
if (replace) {//在递归子循环中不替换,到最后统一替换
//替换掉 "{ }" "[ ]"
var reg = new RegExp(flag + "{", "g"); // 包含字符 "{
str = str.replace(reg, "{");
reg = new RegExp("}" + flag, "g");// 包含字符 }"
str = str.replace(reg, "}");
reg = new RegExp(flag + arr_start, "g"); // 包含字符 "[
str = str.replace(reg, "[");
reg = new RegExp(arr_end + flag, "g"); // 包含字符 ]"
str = str.replace(reg, "]");
//alert(str);
if (str.indexOf(arr_start + "{") > -1) {
reg = new RegExp(arr_start + "{", "g");
str = str.replace(reg, "[{");
}
if (str.indexOf("}" + arr_end) > -1) {
reg = new RegExp("}" + arr_end, "g");
str = str.replace(reg, "}]");
}
}
//alert("--"+str);
return str;
}
return o.toString();
}