JavaScript:JSON

JSON

什么JSON:JavaScript Object Notation缩写,JavaScript对象格式化。简单说所谓JSON就是用JS语法表示的数据的一种格式。JSON就是数据,具有简单易懂,各语言都支持的特点。

JSON的本质就是数据,这个数据的类型是字符串

typeof json对象 //string

语法格式

简单值

数值、字符串、布尔值、null。

注意:JSON中没有undefined,JSON中的字符串必须用双引号

//下面四种数据只能同时选一种
1024
"hello world"
true
null

对象

{

"键(属性名)": 值(属性值),

"键": 值

}

注意:键必须用双引号包起来,且没有变量,后面不加分号

<script type="text/javascript">
    var jsonobj = {"name":"peter", "age":25, "address":"北京"};
    console.log(jsonobj.name);
    console.log(jsonobj.age);
    console.log(jsonobj.address);
    jsonobj.address="天津";
    console.log(jsonobj.address);
</script>

数组

JSON中的数组格式和JS中数组格式类似,格式:[值1, 值2, 值3…]

注意:没有数组名,后面不加分号

<script type="text/javascript">
    var jsonarr = [{"name":"Tom", "age":25, "address":"天津"}, {"name":"Pnoy", "age":25, "address":"丰台"}];
    console.log(jsonarr.length);
    for (var i = 0; i < jsonarr.length; i++) {
        console.log(jsonarr[i].name);
        console.log(jsonarr[i].age);
        console.log(jsonarr[i].address);
    }
</script>

JS对象的序列化和JSON字符串的解析

需要用到一个全局的对象JSON对象,这个对象中有两个方法stringify方法、parse方法

JS对象的序列化:将JS对象转换为JSON字符串, 需要利用stringify方法

格式:JSON.stringify(js对象);

返回值:JSON字符串(用JSON语法表示的对象)

JSON字符串的解析:就是将JSON字符串转换为JS对象,需要利用parse方法

格式:JSON.parse(JSON字符串);

返回值:JS对象

stringify详细介绍

stringify方法的标准格式:JSON.stringify(js对象, 过滤器, 缩进长度),过滤器可以是一个数组,也可以是一个函数

  • 如果是数组,格式:JSON.stringify(js对象, ["属性名", "属性名2"], 缩进长度); 在转化过程中数组中的键值对会被转换为JSON字符串,注意,如果属性值为undefined或者属性值为函数,那么该属性所在的键值对会被过滤掉
  • 如果是一个函数,格式:JSON.stringify(js对象, function(key,value){ //函数体; });

stringify的第三个参数是用来设置代码缩进量的,默认为0个空格(可以省略不写),如果值大于等于1,那么会有自动换行效果,注意空格最多10个。另外第三个参数也可以是字符串,如”--”

<script type="text/javascript">
    	var obj = {
    		name: "Tom",
    		age: 18,
    		gender: "男"
    	}
    	var jsonarr = JSON.stringify(obj, ["name", "age"]); //数组形式,只转换name和age属性
    	console.log(jsonarr); //{"name":"Tom","age":18}
    	
	//函数形式,把name值更改为Pnoy,不转换age和gender属性
	var jsonfun = JSON.stringify(obj, function(key, value) {
		if (key == "name") {
			return "Pony";
		} else if (key == "age" || key == "gender") {
			return undefined;
		} else {
			return value;
		}
	}, "---");
	console.log(jsonfun); //{---"name":"Pony"}
</script>

parse详细介绍

parse方法的标准格式:JSON.parse(JSON字符串, function(key,value) { //对key和value的操作 });

<script type="text/javascript">
    	var jsonobj = '{"name":"Tom", "age":18, "gender": "男"}'; //JSON对象本质属于字符串,所以需要加单引号
    	var jsobj = JSON.parse(jsonobj, function(key, value) {
    		if (key == "name") {
    			return "Pony";
    		} else {
    			return value;
    		}
    	})
	console.log(jsobj); //{name: "Pony", age: 18, gender: "男"}
</script>

eval函数将JSON文本解析成JS对象

在WEB应用程序中,请求和响应中只能传递JSON文本。 

//JSON对象
var jsonobj = '{"name":"peter", "age":25}';
//JSON文本
var jsontxt = "{\"name\":\"peter\", \"age\":25}";

使用eval函数可以将JSON文本转换成对象

<script type="text/javascript">
    	var jsontxt = "{\"name\" : \"peter\",\"age\" : 25,\"address\" : \"北京\"}";
    	console.log(jsontxt);
    	var obj = eval("(" + jsontxt + ")"); //必须嵌套一层小括号
    	console.log(obj);
</script>

定义

eval() 可以接受一个字符串str作为参数,并把这个参数作为脚本代码来执行。

参数

如果参数是一个表达式,eval() 函数将执行表达式;

如果参数是Javascript语句,eval() 将执行 Javascript 语句;

如果执行结果是一个值就返回,不是就返回undefined,如果参数不是一个字符串,则直接返回该参数。

语法

eval(string)

eval("var a=1"); //声明一个变量a并赋值1
eval("2+3"); //执行加运算,并返回运算值
eval("mytest()"); //执行mytest()函数
eval("{b:2}"); //声明一个对象,如果想返回此对象,则需要在对象外面再嵌套一层小括如下:eval("({b:2})")

注意:使用eval来解析JSON格式字符串的时候,会将{}解析为代码块,而不是对象的字面量。

解决方案1,在JSON格式的字符串前面拼接上 "var o =";

解决方案2,把JSON格式的字符串使用()括起来,就不会将{}解析为代码块,而是表达式。

函数作用域

eval()函数并不会创建一个新的作用域,并且它的作用域就是它所在的作用域,有时候需要将eval()函数的作用域设置为全局,当然可以将eval()在全局作用域中使用,这个时候可以用window.eval()的方式实现。

异同点

共同点:都可以讲字符串转化为js代码

不同点:Function创建出来的函数,并不会直接调用,只有当手动去调用创建出来的函数的时候才,eval把字符串转化为代码后,直接就执行了。

Java中JSON对象的转化

简单的解析json字符串

首先将json字符串转换为json对象,然后再解析json对象,过程如下:

JSONObject jsonObject = JSONObject.fromObject(jsonStr);

//根据json中的键得到它的值
String name = jsonObject.getString("name");
int num = jsonObject.getInt("num");
String sex = jsonObject.getString("sex");
int age = jsonObject.getInt("age");

将json字符串转换为java对象

同样先将json字符串转换为json对象,再将json对象转换为java对象,过程如下:

JSONObject obj = JSONObject.fromObject(jsonStr); //将json字符串转换为json对象
Person jb = (Person)JSONObject.toBean(obj,Person.class); //将json对象转换为Person对象

将java对象转换为json字符串

先将java对象转换为json对象,再将json对象转换为json字符串,过程如下:

JSONObject json = JSONObject.fromObject(obj); //将java对象转换为json对象
String str = json.toString();//将json对象转换为字符串

把Java数组转化为JSON对象

JSONArray jsonarr = JSONArray.fromObject(arr);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值