一篇JSON就够了,及java对象转换!!!

JSON 及 java对象转换

什么JSON?

​ JSON(JavaScript Object Notation)js对象表示法。

​ 一种轻量级的文本数据交换格式。

​ 易与人阅读和编写,同时也易于机器的解析和生成。

JSON语法规则

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

  • 数据在键(名称)/值对中

​ JSON数据的书写格式

		Key : value

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

		"book" : "西游记"

​ 等价于下面这条JavaScript语句:

		book : "西游记"
  • 数据由逗号分隔

  • 大括号{}保存对象

  • 中括号[]保存数据,数组可以包含多个对象

JSON常用类型

  • 数字(整数或浮点数)

  • 字符串(在双引号中)

  • 逻辑值(true 或 false)

  • 数组(在中括号中)

  • 对象(在大括号中)

  • null

JSON文件

  • JSON 文件类型是.json

  • JSON 文件的MIME类型是application/json

JSON例子

JSON 数字

​ JSON数字可以是整型或者浮点型

		{ "age" : 20 }
JSON 对象

​ JSON对象在大括号{}中书写,对象可以包含多个名称/值对。

​ 格式:

		{ key1 : value1 , key2 : value2 ... keyN : valueN }

​ 例:

		{ "name" : "lisi" , "age" : 18 , "sex" : "男" }
JSON 数组

​ JSON数组在中括号[]中书写,数组可以包含多个对象。

​ 格式:

		[
			{ key1 : value11 , key2 : value21 },
			{ key2 : value21 , key2 : value22 },
			...
			{ keyN : valueN1 , keyN : valueN2 },
		]

​ 例:

		{
			"books" = [
                { "book" : "西游记" , "price" : 25 },
                { "book" : "水浒传" , "price" : 30 },
                { "book" : "红楼梦" , "price" : 28 },
			]
		}
JSON 布尔值

​ JSON 布尔值可以是 true 或者 false:

		{ "flag" : true }
JSON null

​ JSON 可以设置null值:

		{ "hobby" : null }
JSON 访问对象

​ JSON 可以通过 ( . ) 来访问对象的值:

		var myObject,myName;
		myObject = { "name" : "lisi" , "age" : 18 , "sex" : "男" };
		myName = myObject.name; //myName = "lisi"

​ JSON 也可以通过 ( [] ) 来访问对象的值:

		var myObject,myName;
		myObject = { "name" : "lisi" , "age" : 18 , "sex" : "男" };
		myName = myObject["name"]; //myName = "lisi"
JSON 循环对象

​ JSON 可以通过 for-in 来循环对象的属性:

		var myObject = { "name" : "lisi" , "age" : 18 , "sex" : "男" };
		for( x in myObject){
			Console.log(x); // name age sex
		}

​ JSON 在 for-in 来循环对象的属性时,可以通过 ( [] ) 来访问属性的值:

		var myObject = { "name" : "lisi" , "age" : 18 , "sex" : "男" };
		for( x in myObject){
			//下面的 myObject 是指for循环外的 myObject
			Console.log(myObject[x]); // lisi 18 男
		}
JSON 嵌套对象

​ JSON 对象中可以包含另外一个对象:

		var myObject = {
			"name" : "超级书店",
			"id" : 111222,
			"books" : {
                "book1" : "西游记",
                "book2" : "水浒传",
                "book3" : "红楼梦"
			}
		}
JSON 修改值

​ JSON 可以通过点号 ( . ) 来修改值:

		var myObject = { "name" : "lisi" , "age" : 18 , "sex" : "男" };
		myObject.name = "王五";

​ JSON 可以通过点号 ( [] ) 来修改值:

		var myObject = { "name" : "lisi" , "age" : 18 , "sex" : "男" };
		myObject[name] = "王五";
JSON 删除属性

​ JSON 可以通过使用 delete 关键字来删除 JSON 对象的属性:

		//根据嵌套对象中的数据
		delete myObject.books.book1;

​ 也可以通过使用中括号([])来删除 JSON 对象的属性

		//根据嵌套对象中的数据
		delete myObject[books][book1];

JSON和XML的比较

相同之处:

​ 1、纯文本

​ 2、具有“自我描述性”(人类可读)

​ 3、具有层级结构(值中存在值)

​ 4、可以通过JavaScript进行解析

​ 5、数据可使用AJAX进行传输

不同之处:

​ 1、没有结束标签

​ 2、更短

​ 3、读写书读更快

​ 4、能够使用内建的JavaScript eval()方法进行解析

​ 5、使用数组

​ 6、不使用保留字

最大的不同是:XML 需要使用 XML 解析器来解析,JSON 可以通过标准的 JavaScript 函数来解析。

在网页中可以通过:

JSON.parse():将一个JSON字符串转换为 JavaScript 对象。

JSON.stringify():将 JavaScript 值转换为JSON字符串。

JSON.parse()

​ JSON 通常用于与服务器交换数据。

​ 在接收服务器数据时一般是字符串。

​ 通常使用 JSON.parse() 方法将字符串数据装换为 JavaScript 对象。

​ 语法:

		JSON.parse(text[, reviver])

​ 参数说明:

text 必需,一个有效的 JSON 字符串。

reviver 可选,一个装换结果的函数,将为对象的每个成员调用此函数。

JSON 解析例子

​ 假如从服务器上接收到以下数据:

		{ "name" : "lisi" , "age" : 18 , "sex" : "男" }

​ 可以使用 JSON.parse() 方法处理上面数据,将其转换为 JavaScript 对象:

		var myObject = JSON.parse('{ "name" : "lisi" , "age" : 18 , "sex" : "男" }');

​ 提示:JSON不能储存Date对象。

​ 如果你需要存储Date对象,需要将其转换为字符串。

​ 之后再将字符串转换为Date对象。

		var text = '{ "name" : "lisi" , "birth" : "2000-8-8" , "sex" : "男" }';
		var myObject = JSON.parse(text, function (key,value){
			if(key == "birth"){
				return new Date(value);
			}
			else{
				return value;
			}
		});

​ 提示:JSON不允许包含函数。

​ 但你可以将函数作为字符串存储,之后再将字符串转换为函数。

		var text = '{ "name" : "lisi" , "age" : 18 , "sex" : "男" , "myFunction" : "function (){
		return 99;}"
		}';
		var myObject = JSON.parse(text);
		myObject.myFunction = eval("(" + myObject.myFunction + ")");

JSON.stringify()

​ JSON 通常用于与服务端交换数据。

​ 在向服务器发送数据时一般是字符串。

​ 我们可以使用 JSON.stringify() 方法将 JavaScript 对象转换为字符串。

​ 语法:

		JSON.stringify(value[, replacer[, space]])

​ 参数说明:

value 必需, 要转换的 JavaScript 值(通常为对象或数组)。

replacer 可选,用于转换结果的函数或数组。

space 可选,文本添加缩进、空格和换行符,如果 space 是一个数字,则返回值文本在每个级别缩进指定数目的空格。

JavaScript 对象转换

​ 假如向服务器发送以下数据:

			var myObject = { "name" : "lisi" , "age" : 18 , "sex" : "男" }

​ 可以使用 JSON.stringify() 方法处理上面数据,将其转换为字符串:

			var myJSON = JSON.stringify(myObject);

JavaScript 数组转换

			var myObject = [ "西游记" , "红楼梦" , "水浒传"];
			var myJSON = JSON.stringify(myObject);

​ JSON不能存储Date对象。

​ JSON.stringify() 会将所有日期装换为字符串。

			var myObject = { "name" : "lisi" , "birth" : new Date() , "sex" : "男" };
			var myJSON = JSON.stringify(myObject);

​ JSON 不允许包含函数,JSON.stringify() 会删除 JavaScript 对象的函数,包括 key 和 value。

			var myObject = { "name" : "lisi" , "age" : 18 , "sex" : "男" , "myFunction" : "function (){
			return 99;}"
			};
			var myJSON = JSON.stringify(myObject);

​ 输出 myJSON 为:{ “name” : “lisi” , “age” : 18 , “sex” : “男” }

​ 可以在执行 JSON.stringify() 函数前将函数转换为字符串来避免以上问题的发生:

			var myObject = { "name" : "lisi" , "age" : 18 , "sex" : "男" , "myFunction" : "function (){
			return 99;}"
			};
			myObject.myFunction = myObject.myFunction.toString();
			var myJSON = JSON.stringify(myObject);

提示:不建议在 JSON 中使用函数。

Java 对象和 JSON 数据的互相转换

​ 当在服务器端通过一些操作获得许多的数据,我们希望把这些数据携带到客户端去,可以先将 Java 对象转换为 JSON,在通过一些方式发送到客户端。

​ 可以自己转换,拼字符串,但是这样做太麻烦了。我们通过解析器来解决这个问题。

JSON解析器

​ 常见的解析器: Jsonlib,Gson ,fastjson , jackson。

Java 对象转换 JSON

​ 使用步骤:

​ 导入 Jackson 的相关jar包

[]: https://mvnrepository.com/artifact/com.fasterxml.jackson.core

​ 创建 Jackson 核心对象 ObjectMapper。

​ 调用ObjectMapper 的相关方法进行转换。

​ 转换方法:

​ writeValue(参数1,obj) :有很多的重载

​ 参数1:
File:将obj对象转换为JSON字符串,并保存到指定的文件中
Writer:将obj对象转换为JSON字符串,并将数据填充到字节输入流中
OutputStream:将obj对象转换为JSON字符串,并将JSON数据填充到字节输出流中

​ writeValueAsString(obj) :将对象转换为JSON字符串

 @Test
    public void test1() throws Exception {
        //创建Person对象
        Person person = new Person();
        person.setName("lisi");
        person.setAge(18);
        person.setSex("男");

        //创建jackson的核心对象 ObjectMapper
        ObjectMapper mapper = new ObjectMapper();

        //转换
        String myJson = mapper.writeValueAsString(person);
        System.out.println(myJson);//{"name":"lisi","age":18,"sex":"男"}
        
        //将数据写到D://a.txt文件中
        mapper.writeValue(new File("D://a.txt"),person);

        //将数据关联到Write中
        mapper.writeValue(new FileWriter("D://a.txt"),person);
    }

​ 注解:

​ @JsonIgnore:排除属性

​ @JsonFormat:属性值的格式化

​ 由于 JSON 不能转换 Date数据对象,转换后是一个时间戳,这不是我们期望的,可以通过@JsonIgnore来让其忽略该属性,如:

			public class Person {
    			@JsonIgnore
    			private Date birth;
    		}

​ 但是上面的这种思想是不对的,我们可以同@JsonFormat来指定要转换的格式:

			public class Person {
   				 //@JsonIgnore
 				   @JsonFormat(pattern = "yyyy-MM-dd")
 				   private Date birth;
 			}
    @Test
    public void test2() throws JsonProcessingException {
        //创建Person对象
        Person2 person = new Person2();
        person.setName("lisi");
        person.setAge(18);
        person.setSex("男");
        person.setBirth(new Date());

        //创建jackson的核心对象 ObjectMapper
        ObjectMapper mapper = new ObjectMapper();

        //转换
        String myJson = mapper.writeValueAsString(person);
        System.out.println(myJson);//{"name":"lisi","age":18,"sex":"男","birth":"2021-04-07"}
    }

JSON 转换为 Java对象

​ 使用步骤:

​ 导入 Jackson 的相关jar包。

​ 创建 Jackson 核心对象 ObjectMapper。

​ 调用ObjectMapper 的相关方法进行转换。

​ readValue(json字符串,Class)

    @Test
    public void test3() throws IOException {
        //创建JSON字符串
        String myJson = "{\"name\":\"lisi\",\"age\":18,\"sex\":\"男\",\"birth\":\"2021-04-07\"}";

        //创建jackson的核心对象 ObjectMapper
        ObjectMapper mapper = new ObjectMapper();

        //转换
        Person2 myObject = mapper.readValue(myJson,Person2.class);
        System.out.println(myObject.getName());//lisi
    }

有错误请指出!谢谢!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值