предисловие
В нашей работе парсинг и обработка 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 Подобное — это отношение, а настойчивость — его воплощение.