盒子
盒子
文章目录
  1. JSON
    1. 引言
    2. JSON对象分类
    3. JSON中允许的值
    4. 前后端交互JSON的用法

JSON

JSON

引言

开发中,前后端势必存在数据的交互。那么问题是,数据怎么交互呢?

前端页面的数据对象传递到服务器端,以我们的js和java两门语言来说,js的对象传递给java,java能否识别js对象?

答案是否定的,JS中的对象只有JS自己认识,其他的语言都不认识,那么,我们数据怎么传递呢?

我们思考一下,基本所有的语言都有数字、布尔型、字符串,这三种他们都能识别,那么我们的数据可以用他们来表示?

但是数字和布尔值表示我们的数据的话,可能转换和可读性不是那么友好,而我们的字符串恰恰可以胜任这个工作。

  • JSON介绍

全称 JavaScript Object Notation JS对象表示法

JSON就是一个特殊格式的字符串,这个字符串可以被任意的语言所识别,并且可以转换为任意语言中的对象,JSON在开发中主要用来数据的交互。

JSON这个特殊格式的字符串的特殊性体现在和JS对象的格式一样,只不过JSON字符串中的属性名必须加双引号,其他的和JS语法一致。

JSON对象分类

  1. 对象 {}

var obj = ‘{“name”:”jhh”,”age”:25,”gender”:”男”}’;

var obj2 = ‘{“arr”:[1,2,3]}’;

  1. 数组 []

var arr = ‘[1,2,3,”hello”,true]’;

var arr2 = ‘[{“name”:”jhh”,”age”:25,”gender”:”男”},{“name”:”jzh”,”age”:25,”gender”:”男”},{“name”:”jch”,”age”:25,”gender”:”男”}]’;

JSON中允许的值

  1. 字符串

  2. 数值

  3. 布尔值

  4. null

  5. 对象(普通对象,不允许是函数)

  6. 数组

前后端交互JSON的用法

  • 将JSON字符串转换为JS中的对象

在JS中,为我们提供了一个工具类,就叫JSON,这个对象可以帮助我们将一个JSON转换为JS对象,也可以将一个JS对象转换为JSON

json —> js对象 JSON.parse()

- 可以将一个JSON字符串转换为js对象
- 他需要一个JSON字符串作为参数,会将该字符串转换为JS对象并返回
1
2
3
4
5
6
7
8
9
10
11
var json = '{"name":"jhh","age":25,"gender":"男"}';

var o = JSON.parse(json);

var arr = '[1,2,3,"hello",true]';

var o2 = JSON.parse(arr);

console.log(o.name);//"jhh"

console.log(o2[0]);//1
  • 将JS对象转换为JSON

JSON.stringify()

- 可以将一个JS对象转换为JSON字符串
- 需要一个js对象作为参数,或返回一个JSON字符串
  • 兼容性

JSON这个对象在IE7及以下的浏览器中不支持,所以在这些浏览器中调用时会报错

  • 解决兼容性

eval()

- 这个函数可以用来执行一段字符串形式的JS代码,并将执行结果返回
- 如果使用eval()执行的字符串中含有{},他会将大括号当成是代码块
- 如果不希望将其当成代码块解析,则需要在字符串前后各加一个()
- eval()这个函数的功能很强大,可以直接执行一个字符串中的js代码,但是在开发中尽量不要使用,首先他的执行性能比较差,然后他还具有安全隐患(别有用心的人给你传恶意字符串代码)

示例:

1
2
3
var str2 = "alert('hello')";

eval(str2);//会执行alert

解决兼容:

1
2
3
4
5
6
7
var str = '{"name":"jhh","age":25,"gender":"男"}';

eval(str);//会报错,有{},当成代码块解析了,里面有:,浏览器不认识,解析出错

var obj = eval("("+str+")");//加了括号不会报错了

console.log(obj);//[Object Object]

最终完美解决:

如果需要兼容IE7及以下的JSON操作,需要引入一个外部的js文件来处理。

联系我
扫一扫,添加JzhBetter
  • 微信扫一扫
  • qq扫一扫