Набор инструментов для парсинга Json (FastJson, Jackson, Gson)

Fastjson

предисловие

В нашей работе парсинг и обработка Json незаменимы. Как правило, мы обычно используем три основные категории инструментов: FastJson, Jackson и Gson. Все они имеют свои преимущества и недостатки. В этой статье мы будем использовать их соответствующие API и сравнивать их. .

Во-первых, внедрение каждой технологии JSON

1.1 Роль FastJson

fastjson — это библиотека синтаксического анализа JSON с открытым исходным кодом от Alibaba, которая может анализировать строки в формате JSON, поддерживать сериализацию Java Beans в строки JSON и десериализацию из строк JSON в JavaBeans.

Знакомство с официальным сайтом Github:GitHub.com/alibaba/happening…

1.2 Роль Джексона

Джексон известен как «Java JSON Library» или «Лучший анализатор JSON для Java». Или просто «JSON для Java».

Знакомство с официальным сайтом Github:GitHub.com/faster XML/Просто…

1.3 Роль Гсона

Gson — это библиотека Java, которую можно использовать для преобразования объектов Java в их представление JSON. Его также можно использовать для преобразования строк JSON в эквивалентные объекты Java. Gson может обрабатывать произвольные объекты Java, включая уже существующие объекты, для которых у вас нет исходного кода.

Знакомство с официальным сайтом Github:github.com/google/gson

2. Используйте шаги

2.1 Импорт библиотеки

1. Зависимость FastJson

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

Центральный репозиторий Maven:Внутри репозитория MV.com/artifact/co…

2. Зависимости Джексона

<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-annotations -->
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-annotations</artifactId>
    <version>2.12.1</version>
</dependency>

Центральный репозиторий Maven:Внутри репозитория MV.com/artifact/co…

3. Зависимость от Гсона

<!-- https://mvnrepository.com/artifact/com.google.code.gson/gson -->
<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.8.6</version>
</dependency>

Центральный репозиторий Maven:Внутри репозитория MV.com/artifact/co…

2.2 Преобразование строки JSON в объект Java

Объект человека

/**
 * @author DT开发者
 */
@Data
@EqualsAndHashCode(callSuper = false)
@AllArgsConstructor
@NoArgsConstructor
public class Person implements Serializable {
    
    private Integer id;
    
    private String name;
    
    private Date createTime;
}

1. Версия FastJson

 public static void main(String[] args) {
    String json = "{\"createTime\":1621341922450,\"id\":1,\"name\":\"DT\"}";
    // 方式1: 将json字符串转为Java对象
    Person person = JSON.parseObject(json,Person.class);
    System.out.println("java对象->>>"+person);
    System.out.println("=========================================================");
    // 方式2: 将json字符串转为Java对象
    Person newPerson2 = JSONObject.parseObject(json, Person.class);
    System.out.println("java对象->>>"+newPerson2);
}
JSON.parseObject(String,Object.class)
JSONObject.parseObject(String, Object.class)

在这里插入图片描述

2. Версия Джексона

public static void main(String[] args) {
    // 创建Jackson核心对象 ObjectMapper
    ObjectMapper objectMapper = new ObjectMapper();
    String json = "{\"createTime\":1621341922450,\"id\":1,\"name\":\"DT\"}";
    try {
        Person person = objectMapper.readValue(json, Person.class);
        System.out.println("java对象->>>"+person);
    } catch (JsonProcessingException e) {
        e.printStackTrace();
    }
}

在这里插入图片描述

3. Версия Гсона

public static void main(String[] args) {
     // gson无法正常将时间戳转化成date
     // 使用JSON内存树注册Date类型
     final Gson gson = new GsonBuilder()
     .registerTypeAdapter(Date.class, new JsonDeserializer<Date>() {
         @Override
         public Date deserialize(JsonElement jsonElement, Type type, JsonDeserializationContext context) throws JsonParseException {
             return new Date(jsonElement.getAsJsonPrimitive().getAsLong());
         }
     }).create();

     String json = "{\"createTime\":1621341922450,\"id\":1,\"name\":\"DT\"}";
     Person person = gson.fromJson(json, Person.class);
     System.out.println("java对象->>>"+person);
 }

在这里插入图片描述

2.3 Преобразование объектов Java в строки JSON

1. Версия FastJson

public static void main(String[] args) {
     Person person = new Person(1,"DT",new Date());
     // 方式1:将对象转为json字符串
     String json = JSON.toJSONString(person);
     System.out.println("json字符串->>>"+json);
     System.out.println("=========================================================");
     // 方式2:将对象转为json字符串
     String json2 = JSONObject.toJSONString(person);
     System.out.println("json字符串->>>"+json2);
 }
JSONObject.toJSONString(String)
JSON.toJSONString(String)

在这里插入图片描述

2. Версия Джексона

public static void main(String[] args) {
     // 创建Jackson核心对象 ObjectMapper
     ObjectMapper objectMapper = new ObjectMapper();
     Person person = new Person(1,"DT",new Date());
     try {
         String json = objectMapper.writeValueAsString(person);
         System.out.println("json字符串->>>"+json);
     } catch (JsonProcessingException e) {
         e.printStackTrace();
     }
 }

在这里插入图片描述

3. Версия Гсона

public static void main(String[] args) {
    Gson gson = new Gson();
    Person person = new Person(1,"DT",new Date());
    String json = gson.toJson(person);
    System.out.println("json字符串->>>"+json);
}

在这里插入图片描述

2.4 Преобразование строкового массива JSON в массив JSON

1. Версия FastJson

public static void main(String[] args) {
    List<Person> personList = new ArrayList<>();
    personList.add(new Person(1,"DT",new Date()));
    personList.add(new Person(2,"DT1",new Date()));
    personList.add(new Person(3,"DT2",new Date()));
    String json = JSONObject.toJSONString(personList);
    JSONArray jsArr = JSONObject.parseArray(json);
    System.out.println(jsArr);
}
JSONObject.parseArray(json)

在这里插入图片描述Пройдите циклический массив Json:

 public static void main(String[] args) {
   List<Person> personList = new ArrayList<>();
    personList.add(new Person(1,"DT",new Date()));
    personList.add(new Person(2,"DT1",new Date()));
    personList.add(new Person(3,"DT2",new Date()));
    String json = JSONObject.toJSONString(personList);
    JSONArray jsArr = JSONObject.parseArray(json);
    // 遍历方式1
    jsArr.stream().forEach(json1 ->{
        System.out.println(json1.toString());
    });
    // 遍历方式2
    for (Object o : jsArr) {
        JSONObject obj = (JSONObject) o;
        System.out.println("取到id->>>" + obj.get("id"));
        // 判断是否存在key
        System.out.println("key是否存在->>>"+obj.containsKey("name1"));
        // 判断是否存在值
        System.out.println("value是否存在->>>"+obj.containsValue(obj.get("id")));
    }
}

2. Версия Джексона

public static void main(String[] args) throws JsonProcessingException {
    // 将JSON数组转换为array对象
    ObjectMapper mapper = new ObjectMapper();
    String json = "[{\"id\":1,\"name\":\"张三\",\"createTime\":1622719597081}, {\"id\":2,\"name\":\"李四\",\"createTime\":1622719597081}]";
    // 方式1
    Person[] pp1 = mapper.readValue(json, Person[].class);
    for (Person person : pp1) {
        System.out.println(person);
    }
    // 方式2
    List<Person> ppl2 = Arrays.asList(mapper.readValue(json, Person[].class));
    ppl2.stream().forEach(System.out::println);
    // 方式3
    List<Person> pp3 = mapper.readValue(json, new TypeReference<List<Person>>() {});
    pp3.stream().forEach(System.out::println);
}

3. Версия Гсона

```java
public static void main(String[] args) {
    // gson无法正常将时间戳转化成date
    // 使用JSON内存树注册Date类型
    final Gson gson = new GsonBuilder()
            .registerTypeAdapter(Date.class, new JsonDeserializer<Date>() {
                @Override
                public Date deserialize(JsonElement jsonElement, Type type, JsonDeserializationContext context) throws JsonParseException {
                    return new Date(jsonElement.getAsJsonPrimitive().getAsLong());
                }
            }).create();
    
    String json = "[{\"id\":1,\"name\":\"张三\",\"createTime\":1622719597081}, {\"id\":2,\"name\":\"李四\",\"createTime\":1622719597081}]";
    Type type = new TypeToken<ArrayList<Person>>(){}.getType();
    List<Person> personList = gson.fromJson(json, type);
    personList.stream().forEach(System.out::println);
}

Когда список десериализован, необходимо указать его тип.Метод TypeToken.getType(), предоставленный Gson, может определить тип текущего списка.

在这里插入图片描述

2.5 Преобразование массива JSON в строку JSON

1. Версия FastJson

public static void main(String[] args) {
   List<Person> personList = new ArrayList<>();
    personList.add(new Person(1,"DT",new Date()));
    personList.add(new Person(2,"DT1",new Date()));
    personList.add(new Person(3,"DT2",new Date()));
    String json = JSONObject.toJSONString(personList);
    System.out.println("json->>>"+json);
}

2. Версия Джексона

public static void main(String[] args) throws JsonProcessingException {
   ObjectMapper objectMapper = new ObjectMapper();
    List<Person> personList = new ArrayList<>();
    personList.add(new Person(1,"DT",new Date()));
    personList.add(new Person(2,"DT1",new Date()));
    personList.add(new Person(3,"DT2",new Date()));
    String json = objectMapper.writeValueAsString(personList);
    System.out.println("json->>>"+json);
}

3. Версия Гсона

public static void main(String[] args) {
    Gson gson = new Gson();
    List<Person> personList = new ArrayList<>();
    personList.add(new Person(1,"DT",new Date()));
    personList.add(new Person(2,"DT1",new Date()));
    personList.add(new Person(3,"DT2",new Date()));
    String json = gson.toJson(personList);
    System.out.println("json->>>"+json);
}

Суммировать

Вышеупомянутое содержание сегодняшнего дня. Если вы продолжите читать здесь, вы обязательно что-то приобретете. Лично я предпочитаю использовать FastJson для отправки учебных документов:Ууууууууууууууууууууууу by.com/my3C note/ случилось…

Техническая группа: 176251012 Подобное — это отношение, а настойчивость — его воплощение.