JSON小记

简介: JSON小记

JSON学习

第一章

fastjson

import com.alibaba.fastjson import com.alibaba.fastjson.JSON;

pom依赖

<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson --> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.47</version> </dependency>


简介

这个包里面最主要也是最常用的两个类是 JSON JSONObject 这两个类也都是内部使用的是final map 来实现的。构造的时候可以传入一个ordered。来确定使用LinkedHashMap还是HashMap。看下面这个构造。还可以使用map入参来构造jsonObject。也可以看到jsonobject实际上是json的子类。有一个特征就是 jsonObject是没有static方法的。我们打点出来的静态方法都是JSON那边继承过来的。就不往深挖源码了,知道大概就好。


测试1:

关于json字符串转对象和字符串转json.  JavaBean、Collection、Map、Date、Enum、都可以


测试2:

parseArray(jsonStr,Class)   List   jsonArray跟List一样


JSONObject   实现了Map 接口。看下面方法好多跟map瞅着一样



下面为例子json。data的value可以看成List persion有name属性。 instance可以看成Map(对象的json字符串形式)


测试一代码如下:

@Test
public void myTest(){
    Person person = new Person();
    person.setName("郭洋");
    person.setAge(23);
    String str = JSON.toJSONString(person);// 把对象转化成json字符串
    System.out.println(str); // 输出:{"age":23,"name":"郭洋"}
    // 这个方法可以将Json字符串转成任意的javabean、Map、集合也可以。
    // 不指定后面的class就会转成JSONobject,
    // 若指定转成那个class,前面就要用那个class的实例去接收
    Person person1 = JSON.parseObject(str,person.getClass());// 转成Person类的实例对象
    System.out.println(person1);// Person(name=郭洋, age=23)
    JSONObject jsonObject = JSON.parseObject(str);// 不指定json字符串要转成那个class对象实例,默认转成JSONObject对象实例
    System.out.println(jsonObject);// {"name":"郭洋","age":23}
    Map<Integer,Double> map = new HashMap<>();
    map.put(1,1.2);
    map.put(2,1.2);
    map.put(3,1.2);
    map.put(4,1.2);
    String strMap = JSON.toJSONString(map);// 将Map转成json字符串
    System.out.println(strMap);// {1:1.2,2:1.2,3:1.2,4:1.2}
    Map strMap1 = JSON.parseObject(strMap);// 将json字符串转化成map对象
    System.out.println(strMap1);// {"1":1.2,"2":1.2,"3":1.2,"4":1.2}
}
// 输出:
//{"age":23,"name":"郭洋"}
//Person(name=郭洋, age=23)
//{"name":"郭洋","age":23}
//{1:1.2,2:1.2,3:1.2,4:1.2}
//{"1":1.2,"2":1.2,"3":1.2,"4":1.2}

测试二代码如下:

@Test
public void myTest2(){
    Person person = new Person();
    person.setName("郭洋2");
    person.setAge(22);
    Person person1 = new Person();
    person1.setName("郭洋1");
    person1.setAge(21);
    List<Person> personList = new ArrayList<>();
    personList.add(person);
    personList.add(person1);
    String str = JSON.toJSONString(personList);// 将List转成Json字符串
    System.out.println(str);// [{"age":22,"name":"郭洋2"},{"age":21,"name":"郭洋1"}]
    System.out.println("*****************************");
    List list = JSON.parseObject(str,personList.getClass());// 将json字符串转化成数组对象
    for (Object o : list) {
        System.out.println(o);  //{"name":"郭洋2","age":22}
                                //{"name":"郭洋1","age":21}
    }
    System.out.println("*****************************");
    JSONArray objects = JSON.parseArray(str);// 将json字符串转化成JSONArray对象
    System.out.println(objects);// [{"name":"郭洋2","age":22},{"name":"郭洋1","age":21}]
    System.out.println("*****************************");
    List<Person> personList1 = JSON.parseArray(str,Person.class);
    System.out.println(personList1);// [Person(name=郭洋2, age=22), Person(name=郭洋1, age=21)]
    System.out.println("*****************************");
}
//输出:
//[{"age":22,"name":"郭洋2"},{"age":21,"name":"郭洋1"}]
//*****************************
//{"name":"郭洋2","age":22}
//{"name":"郭洋1","age":21}
//*****************************
//[{"name":"郭洋2","age":22},{"name":"郭洋1","age":21}]
//*****************************
//[Person(name=郭洋2, age=22), Person(name=郭洋1, age=21)]
//*****************************

参考:https://blog.csdn.net/finalheart/article/details/86073477


第二章

Java中TypeReference用法说明

用途、测试

在使用fastJson时,对于泛型的反序列化很多场景下都会使用到TypeReference,例如:


parseObject()方法同理

  • getObject(key,xxx.class)
  • 传入类对象的时候
  • 再不破坏数据结构的情况下,传啥,返回的类型就是啥。
  • getObject(key,new TypeReference< Xxx >() {})
  • 传入TypeReference时,
  • 传啥返回的类型都是Object,再不破坏数据结构的情况下,传入啥类型就用啥类型去接收返回值就可以。
  • parseObject(str,xxx)方法同理(将JSON字符串转化成对应的对象,str:json字符串、xxx要转成的对象类型)
  • xxx若为xxx.class时、或new TypeReference>() {}
  • 传啥返回值的类型就是啥


测试parseObject()方法

若传入的类型有泛型就会编译不通过

想传入带有泛型的类型,就是用new TypeReference< List >() {} 即可


测试:

  • 传new TypeReference< List >() {}
List<Person> personList2 = JSONObject.parseObject(str, new TypeReference<List<Person>>(){});
for (Person person2 : personList2) {
    System.out.println(person2);
}
//输出:
//Person(name=郭洋2, age=22)
//Person(name=郭洋1, age=21)
  • 传List.class
List list1 = JSONObject.parseObject(str, List.class);
for (Object o : list1) {
    System.out.println(o);
}
//输出
//{"name":"郭洋2","age":22}
//{"name":"郭洋1","age":21}

疑惑:

1、JSON.parseObject(String str)与JSONObject.parseObject(String str)的区别

parseObject(String str)的作用

  • JSON.parseObject(String str)是将str转化为相应的JSONObject对象,其中str是“键值对”形式的json字符串,转化为JSONObject对象之后就可以使用其内置的方法,进行各种处理了。

JSON.parseObject(String str)与JSONObject.parseObject(String str)的区别

  • 根据源码显示:JSON是一个抽象类,JSON中有一个静态方法parseObject(String text),将text解析为一个JSONObject对象并返回;JSONObject是一个继承自JSON的类,当调用JSONObject.parseObject(result)时,会直接调用父类的parseObject(String text)。所以两者没什么区别,一个是用父类去调用父类自己的静态的parseObject(String text),一个是用子类去调用父类的静态parseObject(String text),两者调的是同一个方法。
JSONObject json=JSON.parseObject(params); // parms:字符串   把字符串转为JSONObject对象







参考:https://www.cnblogs.com/fu512/p/7595144.html

相关文章
|
6月前
|
JSON 前端开发 JavaScript
JSON 必知必会
JSON 必知必会
111 0
|
3月前
|
JSON 数据格式 C++
JSON(C++)
JSON(C++)
35 1
N..
|
6月前
|
存储 JSON 前端开发
JSON
JSON
N..
46 1
|
6月前
|
存储 JSON JavaScript
JSON应用
JSON应用
59 4
|
JSON Java 数据格式
处理json 和HttpMessageConverterT
处理json 和HttpMessageConverterT
78 0
|
数据格式 JSON JavaScript
JSON是什么?
JSON 全称“JavaScript Object Notation”,译为“JavaScript 对象简谱”或“JavaScript 对象表示法”,是一种轻量级的、基于文本的、开放的数据交换格式。JSON 在 Web 开发领域有着举足轻重的地位,如果您想在 Web 开发领域大展身手的话,就必须了解 JSON。
|
XML JSON JavaScript
json
json
76 0
|
JSON JavaScript 前端开发
什么是 JSON?
什么是 JSON?
97 0
|
存储 JSON 前端开发
|
XML 存储 Web App开发