数据交换-JSON

1.认识JSON

前提:why we use JSON?  - 好用!

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

1.json:JavaScript Object Notatio:JavaScript对象表示法。JSON 是轻量级的文本数据交换格式

2.就是说json其实就是 一种格式,什么样的格式?与JavaScript对象有关---JavaScript自定义对象(k-v键值对)

json用来干什么?用来实现前后端数据的交换,自然的就想到它应该是在http请求与http响应中广泛存在的。

实际怎么使用?类似js自定义对象的写法,k = v,k用来标识value,value可以是字符串,数字Number,数组,json对象,含有json对象的数组。

2.JSON与string的转换

使用方法:JSON.springify(json 对 象) ,将json对象spring化,得到json对象spring化的一个结果,不影响原json对象。

使用方法:JSON.parse(string):string对象转换成json ,不影响原string对象

3.JSON实际使用(Java中)

实际使用:在java中,用 json需要引入到第 3 方的包 gson.jar,gson是Google 提供的用来在 Java 对象和 JSON 数据之间进行映射的java类库,可以对 JSON 字符串 和 Java 对象相互转换。

3.1Javabean 对象和 json 字符串 的转换

回忆javabean是干什么的:(又叫pojo,domin,entity)是在数据库学到的,为了方便映射数据库表,将表的每一行数据作为一个对象使用(oop编程),将每一个数据库表对应了一个Javabean类。

转换:gson 包提供了TypeToken 类,这是一个自定义泛型类,在创建时,需要指定具体类型,继承使用它,我们可以实现把复杂的 json 字符串转换成为 java 对象。

把对象转成为 json 字符串: String str1 = gson.toJson(javabean对象);

把 json 字符串转换成为 java对象 :类名 对象名 = gson.fromJson(str1, 类名.class);

3.2 * List 对象和 json 字符串 的转换

将 List转成 json 字符串:

String bookListStr = gson.toJson(bookList);

json字符串转成list对象:

gson.fromJson(json字符串,type)

Type type = new TypeToken<List<Book>>() {}.getType();

List<Book> bookList2 = gson.fromJson( bookListStr, type);

这个type是:得到类型的完整路径,然后进行底层反射。

如果需要把json字符串 转成 集合 这样复杂的类型, 需要使用gson提供的一个类,

 com.google.gson.reflect

        public class TypeToken<T> {
            final Class<? super T> rawType;
            final Type type;
            final int hashCode;

            protected TypeToken() {
                this.type = getSuperclassTypeParameter(this.getClass());
                this.rawType = Types.getRawType(this.type);
                this.hashCode = this.type.hashCode();
            }

阅读源码可知:使用的是TypeToken , 是一个自定义泛型类,通过TypeToken来指定我们需要转换成的类型

因为fromJson方法需要得到类型的完整路径,然后进行底层反射。

再次理解匿名内部类的作用与本质:就相当于外部类的一个(一次性)对象,有点像一个局部变量,它可以直接访问外部类的所用成员,甚至是private的,比如这里转换中第 3 方的包 gson.jar里的protected方法protected TypeToken() {...},使用匿名内部类隐式的构造器在调隐式的super,通过这种方式调到TypeToken的构造器,创建一个TypeToken对象,在调.getType()方法为fromJson方法得到类型的完整路径,然后进行底层反射。

 

3. 3 map 对象和 json 字符串 的转换

将map 对象转成 json 字符串:

String bookMapStr = gson.toJson(bookMap)

json 字符串:转成map 对象

Map<String,Book>  mapbook=  gson.fromJson(bookMapStr,  new Typetoken<Map<String,book>>(){}.getType());

 

posted @ 2023-01-12 10:46  ZitWang  阅读(47)  评论(0编辑  收藏  举报