JSON的理解

来源:互联网 发布:java获取异常堆栈信息 编辑:程序博客网 时间:2024/05/22 17:19

最近听了很多技术分享,发现好多时候数据的结构都是json的格式,小编一直不理解,下面就来总结一下

什么是 JSON ?

JSON 指的是JavaScript 对象表示法(JavaScript Object Notation)

JSON 是轻量级的文本数据交换格式

JSON 独立于语言 *

JSON 具有自我描述性,更易理解

* JSON 使用 JavaScript语法来描述数据对象,但是 JSON 仍然独立于语言和平台。JSON 解析器和 JSON 库支持许多不同的编程语言。

JSON - 转换为JavaScript 对象

JSON 文本格式在语法上与创建JavaScript 对象的代码相同。

由于这种相似性,无需解析器,JavaScript程序能够使用内建的 eval() 函数,用 JSON 数据来生成原生的 JavaScript 对象。

 

JSON语法

JSON 语法是JavaScript 语法的子集。JSON 语法是 JavaScript 对象表示法语法的子集。

数据在键/值对中

数据由逗号分隔

花括号保存对象

方括号保存数组

JSON 名称/值对

JSON 数据的书写格式是:键/值对。

键/值对包括字段名称(在双引号中),后面写一个冒号,然后是值:

"name": "薛宇"

这很容易理解,等价于这条JavaScript 语句:

name = "薛宇"

 

JSON 值

JSON 值可以是:

数字(整数或浮点数)

字符串(在双引号中)

逻辑值(true 或 false)

数组(在方括号中)

对象(在花括号中)

Null


JSON 对象

JSON 对象在花括号中书写:

对象可以包含多个名称/值对:

{

    "name": "鹿晗",

    "age": 26,

    "birthday": "1990年4月20日",

}

这一点也容易理解,与这条JavaScript 语句等价:

name = "鹿晗";

age = 26;

birthday ="1990年4月20日";


JSON 数组

JSON 数组在方括号中书写:

数组可包含多个对象:

{

    "star_male": [

        {

            "name": "鹿晗",

            "age": "26"

        },

        {

            "nickname": "李易峰",

            "age": "29"

        },

        {

            "nickname": "陈赫",

            "lastName":"31"

        }

    ]

}

在上面的例子中,对象"star_male" 是包含三个对象的数组。每个对象代表一条关于一个明星(姓名和年龄)的记录。

JSON 使用 JavaScript语法

因为 JSON 使用 JavaScript语法,所以无需额外的软件就能处理 JavaScript 中的 JSON。

通过 JavaScript,您可以创建一个对象数组,并像这样进行赋值:

例子

var star_male=  [

    {

        "name": "鹿晗",

        "age": "26"

    },

    {

        "nickname": "李易峰",

        "age": "29"

    },

    {

        "nickname": "陈赫",

        "lastName": "31"

    }

]

可以像这样访问 JavaScript 对象数组中的第一项(鹿晗):

var name =star_male[0].name;

alert(name);

由此我们得到的name是:

鹿晗

我们试着这样修改数据取得鹿晗的age:

var age =star_male[0].age;

alert("age:" +age); 

JSON 使用

把 JSON 文本转换为JavaScript 对象

JSON 最常见的用法之一,是从web 服务器上读取 JSON 数据(作为文件或作为 HttpRequest),将 JSON 数据转换为 JavaScript 对象,然后在网页中使用该数据。

JSON 实例 - 来自字符串的对象

创建包含 JSON 语法的JavaScript 字符串:

var txtJson = '{"star_male" : [' +

'{"name":"鹿晗" , "age":26 },' +

'{"name":"李易峰" , "age":29 },' +

'{"name":"陈赫" , "age":31 } ]}';

由于 JSON 语法是JavaScript 语法的子集,JavaScript 函数 eval() 可用于将 JSON 文本转换为 JavaScript 对象。

eval() 函数使用的是JavaScript 编译器,可解析 JSON 文本,然后生成 JavaScript 对象。必须把文本包围在括号中,这样才能避免语法错误: 

var obj = eval("(" + txtJson + ")");

例子

JSON 值可以是: 

var txtJson = '{"star_male" : [' +

'{ "name":"鹿晗" ,"age":26 },' +

'{"name":"李易峰" , "age":29 },' +

'{"name":"陈赫" , "age":31 } ]}';

//利用函数 eval() 转换成JSON对象

var obj = eval("(" + txtJson + ")");

//输出数组的第一个对象的name值

alert("得到的值:" +obj.star_male[0].name);


JSON 解析器

提示:eval() 函数可编译并执行任何JavaScript 代码。这隐藏了一个潜在的安全问题。 

使用 JSON 解析器将 JSON 转换为JavaScript 对象是更安全的做法。JSON 解析器只能识别 JSON 文本,而不会编译脚本。 

在浏览器中,这提供了原生的 JSON 支持,而且 JSON 解析器的速度更快。 

严重:JSON 解析器 eval() 安全问题说明

大家都知道eval()函数就是evaluation:

它的特点如果遇到运算符(/、*、-、+、>>等),它会直接计算结果,下面我们来看 一个Demo

假如鹿晗有一张CD,name为“20-11”。

var txtJson ='{' +

    '"name": "鹿晗",' +

    '"cd_name": 26-11' +

'}';

//利用函数 eval() 转换成JSON对象

var obj = eval("(" + txtJson + ")");

//输出cd_name

alert("cd_name:" +obj.cd_name);

运行一下,你会惊讶的发现,结果为:

cd_name:15

结果为:26 - 11 = 15;

结论:得出的结果如果字符串里含有运算符,那么用 eval()不安全,它的结果是运算后的结果。



以上就是我对JSON的总结了,代码都可以试试去运行哦,很容易理解的。


1 0
原创粉丝点击