JSON数据格式学习

来源:互联网 发布:sql存储过程详细教学 编辑:程序博客网 时间:2024/06/05 14:48

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()解析时会删除函数
原创粉丝点击