json的理解概要
字符串转成对象,对象转成字符串:
JSON.parse( json) <===> JSON.stringify( json )
jQuery.parseJSON(json) (这个是jquery中的方法)
根据key获取value两种方式
var value1 = eval("jsonObj." + "家电"); // value1 = 40
var value2 = jsonObj["家电"]; // value2 = 40
设置key的属性的值
jsonObj["西门子"] = 100;
删除key和值
deledte jsonObj["海尔"];
遍历json对象(for …in 与 for … of)
区别:for…in 遍历对象的时候是遍历属性key.,遍历数组对象的时候是遍历下标index。
for …of 遍历数组的时候实际上遍历的是元素value,适合用这个。要遍历json对象的话最好转成数组之后再用for …of
let iterable = [3, 5, 7];
for (let i in iterable) {
console.log(i); // 0, 1, 2
}
for (let i of iterable) {
console.log(i); // 3, 5, 7
}
//第一种:for ...in
var packJson = {"name":"Liza", "password":"123"} ;
for(var k in packJson ){
//遍历packJson 对象的每个key/value对,k为key
alert(k + " " + packJson[k]);
}
//第二种: for...of
var obj = {a:1, b:2, c:3};
for (let key of Object.keys(obj)) { // Object.keys(),把json对象的key转成了数组。
console.log(key+":"+ obj[key] );
}
//打印: a :1 b :2 c: 3
合并多个json对象:Object.assign
函数定义:target 目标对象,sources 源对象 (可以有多个)。
可以合并多个对象到一个对象中, 返回target。此方法会同时修改target对象
特点
覆盖:如果目标对象中的属性具有相同的键,则属性将被源对象中的属性覆盖。后面的源对象的属性将类似地覆盖前面的源对象的属性。对前面的例子做修改如下:
Object.assign(target: object, ...sources: any[]): any;
//合并多个json对象
const o1 = { a: 1 };
const o2 = { b: 2 };
const o3 = { c: 3 };
const obj = Object.assign(o1, o2, o3);
console.log(obj); // { a: 1, b: 2, c: 3 }
console.log(o1); // { a: 1, b: 2, c: 3 }, 注意目标对象o1自身也会改变。
//合并具有相同属性的对象:属性被后续参数中具有相同属性的其他对象覆盖。
const o1 = { a: 1, b: 1, c: 1 };
const o2 = { b: 2, c: 2 };
const o3 = { c: 3 };
const obj = Object.assign({}, o1, o2, o3);
console.log(obj); // { a: 1, b: 2, c: 3 }
Object.keys
const keys= Object.keys(options); //只获取json对象的属性key,返回一个存所有key的数组。
var obj1 = {name: "Tom", age: 23};
let keys=Object.keys(obj1); // ["name","age"]
展开语法合并多个json对象
var obj1 = {name: "Tom", age: 23};
var obj2 = {name: "Tom", age: 24};
var obj = {sex: "Man", ...obj1, ...obj2}
console.log(obj); // { sex: 'Man', name: 'Tom', age: 24 }
对json形式数据的数组去重
let list = [{ id: "1", content: "A" },
{ id: "2", content: "B" },
{ id: "2", content: "C" },
{ id: "4", content: "D" }
];
function Unique(arr){
let result = [];
for (let i = 0; i < arr.length; i++) {
let flag = true;
let temp = arr[i];
for (let j = 0; j < result.length; j++) {
if (temp.id === result[j].id) {
flag = false;
break;
}
}
if(flag){
result.push(temp);
}
}
return result;
}