阿里网站如何做接入,做网站的周记,做网站找华企,做网站是什么一、JSON
1.1 简介 JSON#xff1a;JavaScript Object Notation是一种表示对象的方式 基于JavaScript语言的轻量级的数据交换格式;#xff08;即:用来传输数据的一种格式#xff09; 现在传输数据的方式更多是采用json的格式#xff0c;渐渐代替了XML 1.2 JSON的数据表示 …一、JSON
1.1 简介 JSONJavaScript Object Notation是一种表示对象的方式 基于JavaScript语言的轻量级的数据交换格式;即:用来传输数据的一种格式 现在传输数据的方式更多是采用json的格式渐渐代替了XML 1.2 JSON的数据表示 JSON采用名值对的方式来表示一个对象的信息 符号描述示例{}表示对象{name : ‘书名1’ , price:100}[{},{},{}]表示对象数组[ {name : ‘书名1’ , price:100} , {name : ‘书名2’ , price:200} ] 注意 JSON的本质就是一串字符串只不过元素数据会使用特定的符号标注 键和值之间用 : 隔开 键值对之间用 , 隔开 支持无限层嵌套 ps{name : ‘Java从入门到精通’ , price:100 , author:{name:‘吴彦祖’ , info:‘从事java20年’}} ‘’ 或 “” 都可以表示字符串 二、序列化和反序列化 序列化指的是将Java对象转换为JSON字符串的过程即 Java对象 → JSON字符串 反序列化指的是将JSON字符串转换为Java对象的过程即 JSON字符串 → Java对象 三、浏览器中处理JSON
3.1 JSON字符串 → 对象 使用parse函数解析JSON格式字符串 parse函数注意事项坑 字符串的数据格式所有属性必须用双引号引住因为使用JSON.parse需严格遵守JSON规范。单引号与双引号 使用单引号嵌套双引号的方式 ’ {“name” : “Java从入门到精通” , “price”:“100”} ’ 总结 使用JSON.parse()来解析JSON字符串需要注意的是被转化的字符串里面的属性要使用引号并且总体是单引号套双引号的方式太麻烦了。 如果使用eval() 就可以忽略上述两点需要注意的地方 script typetext/javascript //JSON字符串var jsonStr {name : Java从入门到精通 , price:100};//JSON对象 var jsonObj JSON.parse(jsonStr);//解析JSON字符串//获取数据 console.log(jsonObj.name);console.log(jsonObj.price);
/script使用eval函数解析JSON格式字符串 eval(str)将函数的参数作为JavaScript代码去执行 eval函数注意事项坑 使用()包裹JSON字符串 “({name:‘Java从入门到精通’,price:100 , author:{name:‘吴彦祖’ , info:‘从事java20年’}})” 原因 eval本身的问题。 由于json是以”{}”的方式来开始以及结束的。在JavaScript中它会被当成一个语句块来处理所以必须强制性的将它转换成一种表达式。加上圆括号的目的是迫使eval函数在处理JavaScript代码的时候强制将括号内的表达式转化为对象而不是作为代码来执行。 script typetext/javascript//JSON字符串var jsonStr ({name:Java从入门到精通,price:100,author:{name:吴彦祖 , info:从事java20年}});//解析成JSON对象var jsonObj eval(jsonStr);//获取数据console.log(jsonObj.name);console.log(jsonObj.price);console.log(jsonObj.author.name);console.log(jsonObj.author.info);
/scriptscript typetext/javascript//JSON字符串var jsonStr1 ([{name:Java从入门到精通,price:100,author:{name:吴彦祖 , info:从事java20年}}, {name:论演技的重要性,price:30,author:{name:麻生希 , info:从事电影事业13年}}]);//解析成JSON对象数组var jsonObj eval(jsonStr1);//遍历获取数据for(var i 0;ijsonObj.length;i){console.log(jsonObj[i].name);console.log(jsonObj[i].price);console.log(jsonObj[i].author.name);console.log(jsonObj[i].author.info);}
/script3.2 对象 → JSON字符串
script typetext/javascript //对象var book new Object();book.name Java从入门到精通;book.price 100;//将对象转换为JSON字符串var jsonStr JSON.stringify(book);//打印数据console.log(jsonStr);
/script四、Java中处理JSON 如果使用逻辑或Java原生解析类去解析JSON是非常麻烦的 项目中大多数会使用FastJSON和Jackson来操作JSON 五、FastJSON
5.1 简介 FastJson阿里的开源框架被不少企业使用,是一个极其优秀的Json框架使用此框架必须在项目中导入框架包fastjson-1.1.33.jar FastJson对于json格式字符串的解析主要用到了下面三个类 JSONFastJSON的解析器用于JSON格式字符串与JSON对象及javaBean之间的转换JSONObjectFastJSON提供的json对象JSONArrayFastJSON提供json数组对象 5.2 特点 FastJson速度快,无论序列化和反序列化,都是当之无愧的fast功能强大(支持普通JDK类包括任意Java Bean Class、Collection、Map、Date或enum)零依赖(没有依赖其它任何类库) 5.3 对象 → JSON字符串
public class FastJsonTest01 {Testpublic void test01(){//对象-json对象Book book new Book(Java从入门到精通,100);String jsonStr JSON.tojsonStr(book);System.out.println(jsonStr);}Testpublic void test02(){//对象-json对象复杂版本Book book new Book(Java从入门到精通,100,new Author(吴彦祖,从事java20年));String jsonStr JSON.tojsonStr(book);System.out.println(jsonStr);}Testpublic void test03(){//对象-json字符串加过滤器//匿名内部类PropertyFilter filter new PropertyFilter(){public boolean apply(Object obj,String name,Object value){if(name.equalsIgnoreCase(price)){//忽略大小写比较return false;}return true;}};Book book new Book(Java从入门到精通,100,new Author(吴彦祖,从事java20年));String jsonStrJSON.tojsonStr(book,filter);System.out.println(jsonStr);}
}
//书本类
public class Book {private String name;private double price;private Author author;public Book() {}public Book(String name, double price, Author author) {this.name name;this.price price;this.author author;}public Book(String name, double price) {this.name name;this.price price;}public String getName() {return name;}public void setName(String name) {this.name name;}public double getPrice() {return price;}public void setPrice(double price) {this.price price;}public Author getAuthor() {return author;}public void setAuthor(Author author) {this.author author;}Overridepublic String toString() {return Book[name name , price price , author author ];}
}
//作者类
public class Author {private String name;private String info;public Author() {}public Author(String name, String info) {this.name name;this.info info;}public String getName() {return name;}public void setName(String name) {this.name name;}public String getInfo() {return info;}public void setInfo(String info) {this.info info;}Overridepublic String toString() {return Author [name name , info info ];}
}5.4 JSON字符串 → 对象
public class FastJsonTest02 {Testpublic void test01(){//json字符串对象-对象String jsonStr {name:Java从入门到精通,price:100};Book book JSON.parseObject(jsonStr,Book.class);System.out.println(book);}Testpublic void test02(){//复杂的json字符串-对象String jsonStr {author:{info:从事java20年,name:吴彦祖},name:Java从入门到精通,price:100};Book book JSON. parseObject(jsonStr, Book . class);System. out . println(book);}
}5.5 数组或集合 → JSON字符串
public class FastJsonTest03 {Book book1 new Book(Java从入门到精通, 100, new Author(吴彦祖,从事java20年));Book book2 new Book(论演技的重要性, 30, new Author(麻生希, 从事电影事业13年));Testpublic void test01(){//数组-json字符串Book[] books {book1, book2};String jsonStr JSON. tojsonStr(books);System.out.println(jsonStr);}Testpublic void test02() {//List集合-json字符串ArrayListBook list new ArrayListBook();list.add(book1);list.add(book2);String jsonStr JSON.tojsonStr(list);System.out.println(jsonStr);}Testpublic void test03() {//Map集合-〉json字符串HashMapString, Book map new HashMapString,Book();map.put(001, book1);map.put(002, book2);String jsonStr JSON.tojsonStr(map);System.out.println(jsonStr);}
}5.6 JSON字符串 → 数组或集合
public class FastJsonTest04 { Testpublic void test01(){//json字符串-数组String jsonStr [{author:{info:从事java20年,name:吴彦祖},name:Java从入门到精通,price:100},{author:{info:从事电影事业13年,name:麻生希},name:论演技的重要性,price:30}];JSONArray parseArray JSON.parseArray(jsonStr);for(int i 0;i parseArray.size();i){ Book book parseArray.getObject(i, Book.class);System.out.println(book);}}Testpublic void test02(){//json字符串-List集合String jsonStr [{author:{info:从事java20年,name:吴彦祖},name:Java从入门到精通,price:100},{author:{info:从事电影事业13年,name:麻生希},name:论演技的重要性,price:30}];ListBook list JSON.parseArray(jsonStr,Book.class);for(Book book : list){System.out.println(book);}}Testpublic void test03(){//json字符串-Map集合String jsonStr {001:{author:{info:从事java20年, name: 何老师}, name:Java从入门到精通,price:100}, 002:{author:{info:从事电影事业13年,name :麻生希},name:论演技的重要性,price :30}};SuppressWarnings(unchecked)MapString,JSONObject map (MapString, JSONObject) JSON.parse(jsonStr);SetEntryString, JSONObject entrySet map.entrySet();for(EntryString, JSONObject entry : entrySet){String keyentry.getKey();Book value JSON.toJavaObject(entry.getValue(), Book.class);System.out.println(key -- value);}}
}六、Jackson
6.1 简介 Jackson框架是基于Java平台的一套数据处理工具 解析JSON依赖jackon的三个核心类库 jackson-core-2.9.8.jar jackson-annotations-2.9.8.jar jackson-databind-2.9.8.jar 6.2 特点 使用注解让JSON解析更加灵活 6.3 对象、集合 → JSON字符串
public class Test01 {Testpublic void test01() throws JsonProcessingException{//将对象转换为JSON字符串Book book new Book(Java从入门到精通,100,new Author(吴彦祖,从事java20年));//使用ObjectMapper来转化对象为JSON字符串ObjectMapper mapper new ObjectMapper();// 配置mapper忽略空属性mapper.setSerializationInclusion(Include.NON_EMPTY);//将对象转换为JSON字符串String jsonStr mapper.writeValueAsString(book);System.out.println(jsonStr);}Testpublic void test02() throws JsonProcessingException{//将集合转换为JSON字符串Book book1 new Book(Java从入门到精通,100,new Author(吴彦祖,从事java20年));Book book2 new Book(论演技的重要性, 30, new Author(麻生希, 从事电影事业13年));ListBook list new ArrayList();list.add(book1);list.add(book2);//使用ObjectMapper来转化对象为JSON字符串ObjectMapper mapper new ObjectMapper();// 配置mapper忽略空属性mapper.setSerializationInclusion(Include.NON_EMPTY);//将对象转换为JSON字符串String jsonStr mapper.writeValueAsString(list);System.out.println(jsonStr);}
}6.4 JSON字符串 → 对象、集合
public class Test02 {Testpublic void test01() throws IOException{//json字符串对象-对象String jsonStr {\name\:\Java从入门到精通\,\price\:100.0,\author\:{\name\:\吴彦祖\,\info\:\从事java20年\}};//ObjectMapper类用序列化与反序列化映射器ObjectMapper mapper new ObjectMapper();//当反序列化JSON时未知属性会引起的反序列化被打断这里我们禁用未知属性打断反序列化功能//例如JSON字符串里有10个属性而我们的bean中只定义了2个属性其它8个属性将被忽略mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);Book book mapper.readValue(jsonStr, Book.class);System.out.println(book);}Testpublic void test02() throws IOException{//json字符串-数组String jsonStr [{\author\:{\info\:\从事java20年\,\name\:\吴彦祖\},\name\:\Java从入门到精通\,\price\:100},{\author\:{\info\:\从事电影事业13年\,\name\:\麻生希\},\name\:\论演技的重要性\,\price\:30}];//ObjectMapper类用序列化与反序列化映射器ObjectMapper mapper new ObjectMapper();//当反序列化JSON时未知属性会引起的反序列化被打断这里我们禁用未知属性打断反序列化功能//例如JSON字符串里有10个属性而我们的bean中只定义了2个属性其它8个属性将被忽略mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);ListBook list mapper.readValue(jsonStr, new TypeReferenceListBook() {});for (Book book : list) {System.out.println(book);}}
}6.5 Jackson注解
public class Test01 {Testpublic void test01() throws JsonProcessingException{//将对象转换为JSON字符串Book book new Book(Java从入门到精通,100,new Author(吴彦祖,从事java20年));//ObjectMapper类用序列化与反序列化映射器ObjectMapper mapper new ObjectMapper();// 配置mapper忽略空属性mapper.setSerializationInclusion(Include.NON_EMPTY);//将对象转换为JSON字符串String jsonStr mapper.writeValueAsString(book);System.out.println(jsonStr);}Testpublic void test02() throws IOException{//json字符串对象-对象String jsonStr {\bookName\:\Java从入门到精通\,\price\:100.0,\author\:{\name\:\吴彦祖\,\info\:\从事java20年\}};//ObjectMapper类用序列化与反序列化映射器ObjectMapper mapper new ObjectMapper();//当反序列化JSON时未知属性会引起的反序列化被打断这里我们禁用未知属性打断反序列化功能//例如JSON字符串里有10个属性而我们的bean中只定义了2个属性其它8个属性将被忽略mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);Book book mapper.readValue(jsonStr, Book.class);System.out.println(book);}
}
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;public class Book {JsonProperty(bookName)//java属性name序列化到JSON字段的名称为bookNameprivate String name;JsonIgnore//在序列化与反序列化时忽略price属性private double price;private Author author;JsonCreator//指定JSON反序列化创建Book对象时调用此构造函数public Book() {}public Book(String name, double price,Author author) {System.out.println(aaa);this.name name;this.price price;this.author author;}public Book(String name, double price) {this.name name;this.price price;}public String getName() {return name;}public void setName(String name) {this.name name;}public double getPrice() {return price;}public void setPrice(double price) {this.price price;}public Author getAuthor() {return author;}public void setAuthor(Author author) {this.author author;}Overridepublic String toString() {return Book[name name , price price , author author ];}
}七、总结 JSON 格式 {} - 对象[{},{},{}] - 数组 JSON可以支持无限层嵌套序列化和反序列化 序列化指的是将对象转换为JSON字符串的过程即 对象 → JSON字符串反序列化指的是将JSON字符串转换为对象的过程即 JSON字符串 → 对象 浏览器中处理JSON parse()使用单引号嵌套双引号的方式eval()使用()包裹JSON字符串 Java中处理JSON使用FastJSON和Jackson框架 八、作业 创建学生类(Student)属性有String nameint agechar sexList interest创建该类的对象利用FastJSON解析成JSON字符串利用Jackson解析成JSON字符串学生属性中的name更改成username