предисловие
Только лысая голова может стать сильнее.
Текст был включен в мою избранную статью на 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
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:
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
), Обычно используемые методы:
getString(String key)
remove(Object key)
2.3 JSONArray
JSONArray — это массив JSON. Объект массива JSON хранит объекты JSON один за другим, поэтому методы класса в основном используются дляУправлять объектами JSON напрямую
Самый распространенный метод:
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 оригинальных статейТехнические статьи, обширные видеоресурсы, красивые карты мозга,Следуйте, чтобы получить его!
Большое спасиботалантМы можем видеть здесь, если эта статья хорошо написана, я чувствую себя "три криво"что-тоеслипопросить лайк Пожалуйста, следите за ️ поделитесь пожалуйста 👥 Спросите сообщение 💬Это правда для меняочень полезно! ! !
Творить не легко Ваша поддержка и признание - самая большая мотивация для моего творчества Увидимся в следующей статье!