Статья научит вас легко использовать fastjson

Java Java EE

предисловие

Только лысая голова может стать сильнее.

Текст был включен в мою избранную статью на GitHub, Welcome Star.:GitHub.com/Zhongf UC очень…

JSONДумаю, с ним все знакомы, во фронтенде и бэкенде он часто используетJSONвыполнятьобмен данными. И иногда мы такжеJSONнепосредственно в базе данных.

Некоторые люди могут не понять, почему JSON должен храниться в реляционной базе данных?

Подобные сомнения были и у меня в самом начале, я спросил у нескольких коллег и пришел к такому же выводу:Легко расширить, если эти поляНет необходимости использовать индекс, изменения частые, а структуру таблицы менять не хочется, можно хранить в базеJSON

Хотя естьJSONбудет легко расширить, но если вашMySQLЕсли версия все еще относительно низкая, если вы хотитеПроверить с помощью SQLJSONнедвижимость в, еще более хлопотно.

И это всего лишьString, желая работатьJSONСвойства внутри не очень удобно писать самому, поэтому естьfastjsonИспользуйте это для нас.

预览知识点

В этой статье кратко рассказывается оfastjsonпользуйтесь, надеюсь всем будет полезно.Если это поможет, поставьте мне лайк!

1. Начало работы с fastjson

Следующие источники контента:GitHub.com/alibaba/happening…

это можно разобратьJSONСтрока формата, поддерживающая преобразованиеJava Beanсериализовать вJSONстрока, также доступная вJSONСтрока десериализуется вJavaBean

说白了就是JSON和Java对象互相转换

fastjsonпреимущество:Быстрый, широко используемый, простой в использовании, полнофункциональный, Тест завершен (раньше было раскрыто много лазеек, и теперь наша компания следит за процессом выпуска, чтобы заставить нас обновитьfastjsonверсия), теперь используйтеfastjsonобновить хотя бы до1.2.60Версия

Причина скорости:

1. Напишите самостоятельно класс инструментов SerializeWriter, аналогичный StringBuilder.

2. Используйте ThreadLocal для кэширования buf.

3. Используйте asm, чтобы избежать отражения

4. Некоторые алгоритмы оптимизации, реализованные встроенным jdk

2. Используйте fastjson

Сначала мыpomимпортируется в файлfastjsonС зависимостями все в порядке:

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>x.x.x</version>
</dependency>

fastjsonИспользование в основном трех объектов:

  • JSON
  • JSONObject
  • JSONArray

三个类

JSONArray и JSONObject наследуют JSON:

JSONArray和JSONObject继承JSON

2.1 Объекты JSON

JSON Этот класс в основном используется дляконвертировать:

  • Сериализировать объект Java в строку JSON
  • Десериализовать строку JSON в объект Java

Итак, мы часто используем три метода:

  • parseObject(String text, Class<T> clazz)
  • parseArray(String text, Class<T> clazz)
  • toJSONString(Object object)

2.2 JSONObject

Данные в объекте JSON (JSONObject) имеют формуkey-valueформе, поэтому он достигаетMapинтерфейс:

实现了Map接口

Он также очень прост в использовании, просто используйтеMapЭто не имеет большого значения (поскольку нижний слой на самом деле является операциейMap), Обычно используемые методы:

  • getString(String key)
  • remove(Object key)

JSONObject有常用的Map方法

2.3 JSONArray

JSONArray — это массив JSON. Объект массива JSON хранит объекты JSON один за другим, поэтому методы класса в основном используются дляУправлять объектами JSON напрямую

实现List接口

Самый распространенный метод:

  • getJSONObject(int index)

3. Настоящий бой

Из приведенного выше краткого введения мы уже можем знать:

  • JSON используется для десериализации строк в JavaBeans и JavaBeans в JSON.
  • JSONObject представляет собой объект JSON, нижний слой управляется обычно используемой картой.getStringи другие методы для получения соответствующего значения
  • JSONArray представляет собой массив объектов JSON, а нижний слой фактически представляет собой список, который используется для управления объектами JSON.

Вообще говоря, после того, как мы получим данные JSON из базы данных, нам нужно изменить JSON. Например, строка JSON выглядит следующим образом:

{
	"formId": "{$formId}",
	"link": "www.java3y.com",
	"text": [{
		"name": "java3y",
		"label": "3y",
		"value": {
			"value": "{$tureName}",
			"color": "",
			"emphasis": ""
		}
	}, {
		"name": "java4y",
		"label": "3y",
		"value": {
			"value": "{$title}",
			"color": "",
			"emphasis": ""
		}
	}, {
		"name": "java5y",
		"label": "5y",
		"value": {
			"value": "关注我的公众号,更多干货",
			"color": "#ff0040",
			"emphasis": ""
		}
	}],
	"yyyImg": "",
	"yyyAge": "",
	"pagepath": ""
}

мы не будемПрямое управлениеJSON, мы преобразуем JSON в наш собственный JavaBean, затем используем JavaBean и, наконец, сериализуем его в JSONString.

сверхуJSONС точки зрения структуры, это все еще относительно сложно, идея такова:

  • мы можем согласноJSONСтруктура строит соответствующий JavaBean
  • использоватьJSONКласс для десериализации строки JSON в JavaBean
  • Изменить значение JavaBean
  • наконецJavaBeanСериализировать в строку JSON

сверхуJSONструктура, сначала мы нацеливаемсяtextЭтот уровень абстрагируется как JavaBean. (На самом деле самая внутренняя структураvalue, но мне не нужно иметь дело с этим здесьvalue, так что это не абстракция)

/**
 * "name": "java3y",
 * 	"label": "3y",
 * 	"value": {
 * 		"value": "{$tureName}",
 * 		"color": "",
 * 		"emphasis": ""
 *    }
 *
 *  对Text进行抽象
 */
public class TextInfo {

    private String name;
    private String label;

    // 因为value我这边不需要操作,所以就不抽象了,如果每层都要处理,那就得抽象
    private Object value;


    // set get ... 省略 欢迎关注我的公众号:Javay

}

Затем абстрагируйте внешний слой:

public class ContentValue {
    private String formId;
    private String link;
    // 这里是一个数组,我们就抽象为List,属性名为text
    private List<TextInfo> text;

    private String yyyImg;
    private String yyyAge;
    private String pagepath;
    
    // set get ... 省略 欢迎关注我的公众号:Javay

}

Давайте посмотрим на десериализацию:

public static void main(String[] args) {

    // JSON 字符串
    String s = "{\"formId\":\"{$formId}\",\"link\":\"www.java3y.com\",\"text\":[{\"name\":\"java3y\",\"label\":\"3y\",\"value\":{\"value\":\"{$tureName}\",\"color\":\"\",\"emphasis\":\"\"}},{\"name\":\"java4y\",\"label\":\"3y\",\"value\":{\"value\":\"{$title}\",\"color\":\"\",\"emphasis\":\"\"}},{\"name\":\"java5y\",\"label\":\"5y\",\"value\":{\"value\":\"关注我的公众号,更多干货\",\"color\":\"#ff0040\",\"emphasis\":\"\"}}],\"yyyImg\":\"\",\"yyyAge\":\"\",\"pagepath\":\"\"}";

    // 使用JSON对象 将JSON字符串反序列化为JavaBean
    ContentValue contentValue = JSON.parse(s, ContentValue.class);
    System.out.println(contentValue);


    }

Результат десериализации:

反序列化

Мы хотим изменить значение в тексте, просто нужно оперироватьJavaBeanДостаточно:

public static void main(String[] args) {

    // JSON 字符串
    String s = "{\"formId\":\"{$formId}\",\"link\":\"www.java3y.com\",\"text\":[{\"name\":\"java3y\",\"label\":\"3y\",\"value\":{\"value\":\"{$tureName}\",\"color\":\"\",\"emphasis\":\"\"}},{\"name\":\"java4y\",\"label\":\"3y\",\"value\":{\"value\":\"{$title}\",\"color\":\"\",\"emphasis\":\"\"}},{\"name\":\"java5y\",\"label\":\"5y\",\"value\":{\"value\":\"关注我的公众号,更多干货\",\"color\":\"#ff0040\",\"emphasis\":\"\"}}],\"yyyImg\":\"\",\"yyyAge\":\"\",\"pagepath\":\"\"}";

    // 使用JSON对象 将JSON字符串反序列化为JavaBean
    ContentValue contentValue = JSON.parse(s, ContentValue.class);
    List<TextInfo> text = contentValue.getText();
    for (TextInfo textInfo : text) {
        textInfo.setName("Java3y");
        textInfo.setLabel("关注我的公众号呗");
    }


    // 修改后,反序列化回去
    String content = JSON.toJSONString(contentValue);
}

Результат сериализации:

序列化

Легко меняйте поля в строках JSON.

Наконец

В целом, fastjson по-прежнему достаточно удобен в использовании, да и скорость у него тоже очень быстрая, но в последнее время появилось много лазеек.

Эта книга была включена в мои избранные статьи на GitHub, добро пожаловать, звезда:GitHub.com/Zhongf UC очень…

рад вывестигалантерейные товарыОбщедоступный номер технологии Java:Java3y. В публичном аккаунтеБолее 300 оригинальных статейТехнические статьи, обширные видеоресурсы, красивые карты мозга,Следуйте, чтобы получить его!

转发到朋友圈是对我最大的支持!

Большое спасиботалантМы можем видеть здесь, если эта статья хорошо написана, я чувствую себя "три криво"что-тоеслипопросить лайк Пожалуйста, следите за ️ поделитесь пожалуйста 👥 Спросите сообщение 💬Это правда для меняочень полезно! ! !

Творить не легко Ваша поддержка и признание - самая большая мотивация для моего творчества Увидимся в следующей статье!