JSON数据格式学习

JSON
https://github.com/douglascrockford/JSON-js

JSON是JavaScript Object Notation的简写,是JavaScript对象表示法,即使用JavaScript语法来描述数据对象,但是又独立于语言和平台。JSON是轻量级的纯文本数据交换格式,具有层级结构,容易理解。与XML比较,具有更小、更快、更易解析的特点(没有结束标签、更短、读写的速度快,且能使用内建的JavaScript eval()方法进行解析)。

JSON语法
  • 数据在名称/值中,即 key/value(键/值)对

    • 名称:必须是字符串
    • 值:可以是数字(整数、浮点数)、字符串、逻辑值(true、false)、数组(在中括号中)、对象(在大括号中)、null
    • key 和 value 中使用冒号:分割
    • 每个 key/value 对使用逗号,分割
  • 数据由逗号分隔
  • 大括号保存对象
  • 中括号保存数组
  • 逗号分隔数据

JSON数据定义
var personInfo = {
    "name":"devZhang",
    "height":83.2,
    "age":null,
    "male":true,
    "company":[
        {"name":"公司1"},
        {"name":"公司2"},
        {"name":"公司3"},
        {"name":"公司4"},
        {"name":"公司n"}
    ],
    "team":[
        "iOS",
        "Android",
        "Java",
        "H5",
        [
            "dev01",
            "dev02"
        ]
    ],
    "education":{
        "school":"xx大学",
        "education":"学士",
        "time":"20xx~20xx",
        "course":[
            "C语言",
            "Java课程",
            "网络基础"
        ]
    }
};

JSON数据的使用

使用点号.来访问对象的值,或使用中括号[]来访问对象的值。

  • 获取:
    • 单个属性值的获取
    • 多个属性值的获取 ,即循环获取(注意:只能使用中括号来获取,不能使用点号来获取)
// 单个值
var name = personInfo.name;
var name = personInfo["name"];
var company = personInfo.company[0].name;
var school = personInfo.education.school;

// 多个值
for (x in sites)
{
        var value = personInfo[x];
}
  • 修改
personInfo.name = "devZhangTmp";
  • 删除
delete personInfo.name;
delete personInfo["name"];

数据格式转换:JSON通常用于与服务端交换数据,即发送数据给服务端,或从服务端接收数据。

字符串转换成对象:JSON.parse()的使用
接收服务器数据时一般是字符串,因此需要通过方法JSON.parse()将字符串转换成对象进行使用。
格式:JSON.parse(text字符串, reviver转换结果函数)
示例:

  • 无reviver情况
var text = '{ "name":"devZhang", "job":"iOSDev", "workDate":"2007-07-01"}'
var obj = JSON.parse(text);
var name = obj.name;
  • 有reviver情况
var text = '{ "name":"devZhang", "job":"iOSDev", "workDate":"2007-07-01"}'
var obj = JSON.parse(text, function (key, value) {
    if (key == "workDate"){
        return new Date(value);
    } else {
        return value;
    }
});
var name = obj.name;
// 等价于使用eval("(" + 字符串 + ")"),即
var obj = eval("(" + text + ")");

对象转换成字符串:JSON.stringify()的使用
向服务端发送的数据一般时字符串,因此需要通过方法JSON.stringify()将对象转换成字符串进行使用。
格式:JSON.stringify(value有效的JSON字符串, replacer转换结果的函数或数组, space文本添加缩进/空格/换行符)
示例:

var obj = { "name":"devZhang", "job":"iOSDev", "workDate":"2007-07-01"};
var textJSON = JSON.stringify(obj);

函数解析

JSON中的值不允许包含函数,但你可以将函数作为字符串存储,之后再将字符串转换为函数。
示例:
字符串转的对象时的解析:

var text = '{ "name":"devZhang", "alexa":"function () {return 11;}"}';
var obj = JSON.parse(text);
obj.alexa = eval("(" + obj.alexa + ")"); // 字符串函数解析后再调用
var message = obj.name + " Alexa 排名:" + obj.alexa();

注意:要 eval 这里要添加(‘(’ + obj.alexa + ‘)’)呢?原因在于:eval 本身的问题。 由于 json 是以 {} 的方式来开始以及结束的,在 js 中,它会被当成一个语句块来处理,所以必须强制性的将它转换成一种表达式。
加上圆括号的目的是迫使 eval 函数在处理 JavaScript 代码的时候强制将括号内的表达式(expression)转化为对象,而不是作为语句(statement)来执行。举一个例子,例如对象字面量 {},如若不加外层的括号,那么 eval 会将大括号识别为j avascript 代码块的开始和结束标记,那么{}将会被认为是执行了一句空语句。

对象转字符串时的解析:

var obj = { "name":"devZhang", "alexa":function () {return 11;}};
obj.alexa = obj.alexa.toString(); // 函数转换成字符串再转换成对象
var text = JSON.stringify(obj);

使用注意:

  • 访问对象时,使用点号,或中括号
  • 循环访问对象时,使用中括号
  • JSON不允许包含函数,但可以将函数作为字符串存储,使用时再将字符串转换成函数,JSON.parse()解析时正常使用,JSON.stringify()解析时会删除函数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

番薯大佬

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值