java json解析哪个好_java常用的几种json解析工具使用
頭痛,某群初學(xué)朋友問我他解析json怎么和他以前學(xué)的不一樣,我本著說百度個(gè)教程給他,一搜索亂七八糟復(fù)制來復(fù)制去的博客一大堆,注釋不寫注視,一個(gè)是gson 一個(gè)是fastJson標(biāo)題也沒寫明白,行那就我來自己敲一遍,我來總結(jié)一下,不對的地方請指教。
首先json的官方網(wǎng)站
再次我們常用的解析工具
1、JSON 官方出品(非常多種,這里使用org.json)
2、GSON 谷歌出品
3、FastJSON 阿里出品
4、jackson SpringMVC內(nèi)置解析
逐一試用一下,所需jar包,直接導(dǎo)入或maven自行找加載方式
測試前創(chuàng)建兩個(gè)類
package json;
public class Person {
private int id;
private String name;
private int age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Person{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
'}';
}
}
package json;
import java.util.ArrayList;
public class Departamentas {
private int id;
private String name;
private ArrayList persons;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public ArrayList getPersons() {
return persons;
}
public void setPersons(ArrayList persons) {
this.persons = persons;
}
@Override
public String toString() {
return "Departamentas{" +
"id=" + id +
", name='" + name + '\'' +
", persons=" + persons +
'}';
}
}
一、官方org.json(麻煩一批不好用)
使用代碼如下
package json;
import org.json.JSONArray;
import org.json.JSONObject;
import org.junit.jupiter.api.Test;
public class JsonTest {
@Test
public void jsonOrg() {
//解析json
String json1 = "{'id':1,'name':'bai123'," +
"'person':[" +
"{'id':5,'name':'白藍(lán)一','age':18}," +
"{'id':6,'name':'白藍(lán)二','age':18}" +
"]}";
JSONObject jObject1 = new JSONObject(json1);
//獲取對應(yīng)key的值
System.out.println(jObject1.get("name"));
//拿到person數(shù)組
JSONArray person1 = jObject1.getJSONArray("person");
//獲取對應(yīng)索引的值
System.out.println(person1.get(0));
//--------------------------------------------------------
//生成json
JSONObject jo1 = new JSONObject();
jo1.put("id", 7);
jo1.put("name", "白藍(lán)三");
jo1.put("age", 18);
JSONArray ja2 = new JSONArray();
ja2.put(jo1);
JSONObject jo3 = new JSONObject();
jo3.put("id", 2);
jo3.put("name", "bai124");
jo3.put("person", ja2);
String json = jo3.toString();
System.out.println(json);
}
}
打印結(jié)果
image.png
二、Gson 比較好用
上代碼,非常方便
package json;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import org.junit.jupiter.api.Test;
import java.util.ArrayList;
public class GsonTest {
@Test
public void gson() {
//解析json
String json1 = "{'id':1,'name':'bai123'," +
"'persons':[" +
"{'id':5,'name':'白藍(lán)一','age':18}," +
"{'id':6,'name':'白藍(lán)二','age':18}" +
"]}";
Gson gson = new Gson();
Departamentas departamentas = gson.fromJson(json1, Departamentas.class);
System.out.println(departamentas);
//生成json
departamentas.setName("bai124");
String json = gson.toJson(departamentas);
System.out.println(json);
}
}
打印結(jié)果
image.png
三、fastjson 效率高非常好用
package json;
import com.alibaba.fastjson.JSON;
import org.junit.jupiter.api.Test;
import java.util.List;
public class FastTest {
@Test
public void fast() {
//解析json
String json1 = "{'id':1,'name':'bai123'," +
"'persons':[" +
"{'id':5,'name':'白藍(lán)一','age':18}," +
"{'id':6,'name':'白藍(lán)二','age':18}" +
"]}";
String json2 = "['白藍(lán)1','白藍(lán)2','白藍(lán)3']";
Departamentas departamentas = JSON.parseObject(json1, Departamentas.class);
System.out.println(departamentas);
//數(shù)組解析
List list = JSON.parseArray(json2, String.class);
System.out.println(list);
//生成json
departamentas.setName("生成");
String s = JSON.toJSONString(departamentas);
System.out.println(s);
}
}
打印結(jié)果
image.png
四、jackson SpringMVC內(nèi)置的解析器用的就是這個(gè)
注意事項(xiàng)
//允許出現(xiàn)特殊字符和轉(zhuǎn)義符
mapper.configure(Feature.ALLOW_UNQUOTED_CONTROL_CHARS, true) ;
//允許出現(xiàn)單引號
mapper.configure(Feature.ALLOW_SINGLE_QUOTES, true) ;
package json;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.junit.jupiter.api.Test;
import java.io.IOException;
import java.util.ArrayList;
public class JackTest {
@Test
public void jack() throws IOException {
//解析json
String json1 = "{\"id\":1,\"name\":\"bai123\",\"persons\":[{\"id\":1,\"name\":\"白藍(lán)1\",\"age\":20}]}";
String json2 = "[\"白藍(lán)1\",\"白藍(lán)2\",\"白藍(lán)3\"]";
ObjectMapper mapper = new ObjectMapper();
Departamentas departamentas = mapper.readValue(json1, Departamentas.class);
System.out.println(departamentas);
//2、
ArrayList list = mapper.readValue(json2,
new TypeReference>() {
});
System.out.println(list);
//生成json
String json=mapper.writeValueAsString(departamentas);
System.out.println(json);
}
}
打印結(jié)果
image.png
本文是幾個(gè)工具的簡單使用,其他方法請自行查詢相關(guān)API,例如解決時(shí)間格式化之類的,可以使用對應(yīng)的注解,并且要注意的是除了官方的其他3個(gè)都是需要使用標(biāo)準(zhǔn)bean.
轉(zhuǎn)載請注明來源。
總結(jié)
以上是生活随笔為你收集整理的java json解析哪个好_java常用的几种json解析工具使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql linux文件_MySQL在
- 下一篇: 锋利的jQuery--编写jQuery插