小案例
let obj = {'a1':'a1', a2: "a22", a3: "a1"};
JSON.parse(JSON.stringify(obj).replace(/a1/g,"aa"));
console.log(obj);
`注意:如果要修改的属性名,有属性值与它相等,那么属性值也会被修改,慎用!`
let object = JSON.parse(JSON.stringify(obj).replace(/a1/g,"aa"));
console.log(object);
`改变多个属性名`
let object = JSON.parse(
JSON.stringify(obj)
.replace(/a1/g,"aa")
.replace(/a2/g,"bb")
);
console.log(object);
JSON.parse()
JSON.parse()
:用来解析JSON字符串
,构造由字符串描述的JavaScript值
或对象
- 语法:
JSON.parse(text, reviver)
JSON.parse('{}');
JSON.parse('true');
JSON.parse('"foo"');
JSON.parse('[1, 5, "false"]');
JSON.parse('null');
var jsonObj = '{"name":"jack","age":18,"gender":"男"}';
var jsonArr ='[{ "name": "Jack", "age": 18, "gender": "男" }, { "name": "Jack", "age": 18, "gender": "男" }, { "name": "Jack", "age": 18, "gender": "男" }]';
var obj = JSON.parse(jsonStr);
var arr = JSON.parse(jsonArr);
console.log(obj);
console.log(arr);
reviver 函数
JSON.parse('{"p": 5}', function (k, v) {
if(k === '') return v;
return v * 2;
});
JSON.parse('{"1": 1, "2": 2,"3": {"4": 4, "5": {"6": 6}}}', function (k, v) {
console.log(k);
return v;
});
JSON.stringify()
JSON.stringify()
: 将一个JavaScript值
或对象
转换为 JSON 字符串
- 语法:
JSON.stringify(value, replacer, space)
JSON.stringify({});
JSON.stringify(true);
JSON.stringify("foo");
JSON.stringify([1, "false", false]);
JSON.stringify({ x: 5 });
JSON.stringify({x: 5, y: 6});
JSON.stringify([new Number(1), new String("false"), new Boolean(false)]);
JSON.stringify({x: undefined, y: Object, z: Symbol("")});
JSON.stringify([undefined, Object, Symbol("")]);
JSON.stringify({[Symbol("foo")]: "foo"});
JSON.stringify({[Symbol.for("foo")]: "foo"}, [Symbol.for("foo")]);
JSON.stringify(
{[Symbol.for("foo")]: "foo"},
function (k, v) {
if (typeof k === "symbol"){
return "a symbol";
}
}
);
JSON.stringify(
Object.create(
null,
{
x: { value: 'x', enumerable: false },
y: { value: 'y', enumerable: true }
}
)
);
var obj = {
name: 'Jack',
age: 18,
gender: '男'
};
var arr = [
{
name: 'Jack',
age: 18,
gender: '男'
},
{
name: 'Jack',
age: 18,
gender: '男'
},
{
name: 'Jack',
age: 18,
gender: '男'
}
];
var jsonObj = JSON.stringify(obj);
var jsonArr = JSON.stringify(arr);
console.log(jsonObj);
console.log(jsonArr);
replacer 参数
- replacer 参数可以是一个函数或者一个数组。
- 作为函数,它有两个参数,键(key)和值(value),它们都会被序列化。
- 不能用 replacer 方法,从数组中移除值(values),如若返回
undefined
或者一个函数
,将会被 null
取代。 - 函数应当返回JSON字符串中的value:
1. 如果返回一个 Number, 转换成相应的字符串作为属性值被添加入 JSON 字符串
2. 如果返回一个 String, 该字符串作为属性值被添加入 JSON 字符串
3. 如果返回一个 Boolean, "true" 或者 "false" 作为属性值被添加入 JSON 字符串
4. 如果返回 undefined,该属性值不会在 JSON 字符串中输出
let foo = {foundation: "Mozilla", model: "box", week: 45, transport: "car", month: 7};
function replacer(key, value) {
if (typeof value === "string") {
return undefined;
}
return value;
}
var jsonString = JSON.stringify(foo, replacer);
console.log(jsonString )
JSON.stringify(foo, ['week', 'month']);
space 参数
- 如果是一个数字, 则在字符串化时每一级别会比上一级别缩进多这个数字值的空格(最多10个空格);
- 如果是一个字符串,则每一级别会比上一级别多缩进该字符串(或该字符串的前10个字符)
- 示例 1:
JSON.stringify({ a: 2 }, null, " ");
JSON.stringify({ a: 2 }, null, "ss");
JSON.stringify({ a: 2 }, null, 2);
let user = {
name: "John",
age: 25,
roles: {
isAdmin: false,
isEditor: true
}
};
alert(JSON.stringify(user, null, 2));