предисловие
Только лысая голова может стать сильнее.
Текст был включен в мою избранную статью на 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 оригинальных статейТехнические статьи, обширные видеоресурсы, красивые карты мозга,Следуйте, чтобы получить его!
Большое спасиботалантМы можем видеть здесь, если эта статья хорошо написана, я чувствую себя "три криво"что-тоеслипопросить лайк Пожалуйста, следите за ️ поделитесь пожалуйста 👥 Спросите сообщение 💬Это правда для меняочень полезно! ! !
Творить не легко Ваша поддержка и признание - самая большая мотивация для моего творчества Увидимся в следующей статье!