对象是一个复杂的数据类型,假如想把对象进行存储,不能直接对对象进行本地写入或者是网络传输,json是解决方案之一;
数据在写入磁盘或者是网络传输时,在传输过程中所有的数据都以二进制的形式进行,字符串比较特殊,字符串可以按照某一种编码直接进行二进制;
如果数据换成了对象,没办法直接对数据对象进行编码,需要把对象进行序列化;
序列化:把对象转成字符串;
反序列化:把字符串变为原对象(解析)
当对象序列化成字符串之后就可以进行数据传输,当数据传输完毕之后再把字符串反序列化成对象,就可以使用,这就是json的原理;
JSON是js中的一个内置对象,用途是吧对象进行json格式化序列化以及json解析,stringify方法是把对象转成字符串的,参数是序列化对象,返回json字符串;
var jsonStr = JSON.stringify(obj);
incov-lite模块(解决编码问题 )
反序列化:
因为字符串上面的编码五花八门,但是系统支持的只有一部分,有的文件不支持,incov-lite模块可以根据字符串编码的形式配置;需要一个buffer该对象里面是数据,把buffer封装好然后转成自己想要的编码格式之后会以string形式返回,然后在反序列化就可以了;
var incov = require("iconv-lite");
var buf = new Buffer(data, "binary");
var str = incov.decode(buf, "GBK");
var obj2 = JSON.parse(str);
// json数据的打印{}代表对象 ""代表的是对象的属性
// []代表数据(有的是小括号)
for...in...
for (var key in obj2.data) {
// key代表的是对象的属性(有这个叫做key的属性存在)
// key 是forin遍历出来的对象身上的所有属性
// obj2.data[key]哈希表的表达方式(字典):根据键来取值
// 类似于jquery的eq方法 key 在此处是一个变量
// 根据键去取值
}