Fastjson Obejct/Map/JSON/String 互转
Pengenalan kepada Fastjson
Fastjson ialah perpustakaan JSON berprestasi tinggi dan lengkap yang ditulis dalam bahasa Java. Ia menggunakan algoritma "assumed ordered fast matching" untuk meningkatkan prestasi JSON Parse ke tahap yang melampau Ia kini merupakan pustaka JSON terpantas dalam bahasa Java. Antara muka Fastjson adalah ringkas dan mudah digunakan, dan telah digunakan secara meluas dalam pelbagai senario aplikasi seperti siri cache, interaksi protokol, output Web dan pelanggan Android.
Ciri-ciri utama:
- Fast FAST (lebih pantas daripada mana-mana penghurai dan penjana berasaskan Java lain, termasuk jackson)
- Powerful (menyokong kelas JDK biasa termasuk mana-mana Kelas Java Bean, Koleksi, Peta, Tarikh atau enum) )
- Sifar kebergantungan (tiada kebergantungan pada mana-mana perpustakaan lain kecuali JDK)
- Sumber terbuka, menggunakan protokol Apache License 2.0.
https://github.com/alibaba/fastjson
Fastjson Obejct/Map/JSON/String Interconversion method
Dalam penghuraian log dan interaksi penghantaran data front-end dan back-end, kita sering menghadapi interaksi penghantaran String dan peta, Dalam senario penukaran dan penghuraian bersama json, xml dan format lain, json pada dasarnya telah menjadi format interaksi data standard de facto merentas bahasa dan bahagian depan dan belakang. Perlu dikatakan bahawa terdapat sejumlah besar perpustakaan untuk menghuraikan json dalam pelbagai bahasa (untuk pengenalan kepada format json tertentu dan perpustakaan pihak ketiga, sila lihat: http://www.json.org/json- zh.html). Contohnya, python disepadukan ke dalam perpustakaan terbina dalam , ia telah menjadi API standard Hari ini kita akan bercakap tentang cara menggunakan format json dengan mudah.
Daripada pengenalan pautan di atas, kita dapat melihat bahawa Java mempunyai perpustakaan json pihak ketiga yang paling banyak, yang boleh dikatakan sebagai irama seratus bunga mekar dan seratus aliran pemikiran yang bersaing. . . Walau bagaimanapun, sesetengah perpustakaan mempunyai masalah pergantungan rantaian Anda harus memberi perhatian apabila menggunakannya. Jika anda tidak menggunakan maven untuk menguruskan kebergantungan anda, ia akan menyakitkan untuk digunakan, seperti json-lib, smart-json, dsb. Apa yang saya ingin cadangkan di bawah ialah perpustakaan json sumber terbuka oleh jurutera Alibaba: FastJSON Pustaka ini sangat baik dari segi kelajuan penghuraian dan kemudahan penggunaan.
1. kaedah di kelas melakukannya secara langsung.
public static final Object parse(String text); // 把JSON文本parse为JSONObject或者JSONArray public static final JSONObject parseObject(String text); // 把JSON文本parse成JSONObject public static final <T> T parseObject(String text, Class<T> clazz); // 把JSON文本parse为JavaBean public static final JSONArray parseArray(String text); // 把JSON文本parse成JSONArray public static final <T> List<T> parseArray(String text, Class<T> clazz); //把JSON文本parse成JavaBean集合 public static final String toJSONString(Object object); // 将JavaBean序列化为JSON文本 public static final String toJSONString(Object object, boolean prettyFormat); // 将JavaBean序列化为带格式的JSON文本 public static final Object toJSON(Object javaObject); 将JavaBean转换为JSONObject或者JSONArray。e
3. . Jenis penting ialah Senarai<Objek>
seperti sokongan anotasi dan menyokong pensirian jenis penuh Ini adalah ciri yang baik dan fungsi yang berkuasa, dan tidak dalam skop ujian ini . 5. Kod ujianpackage lavasoft.stu.json;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SerializeConfig;
import com.alibaba.fastjson.serializer.SimpleDateFormatSerializer;
import java.util.*;
/**
* Created by IntelliJ IDEA.
*
* @author leizhimin 11-11-22 上午9:15
*/ public class Foo {
private String vString = "vStringhehhehe";
private char vchar = 'x';
private byte vbyte = 64;
private short vshort = 128;
private int vint = 65535;
private long vlong = 9999999L;
private float vfloat = 12.1f;
private double vdouble = 22.203d;
private boolean vboolean = false;
// private Date vdate = new Date(); private Date dddd = new Date();
private Date vDate = new Date();
private Date v_Date = new Date();
private Object vnull = null;
private String[] avString = {"aaa", "bbb", "ccc"};
private int[] avint = {1, 2, 3, 4};
private boolean[] avboolean = {true, false, true, true};
private List<String> listString = new ArrayList<String>();
private Map<String, String> map = new HashMap<String, String>();
private Bar bar = new Bar();
private Bar[] avBar = {new Bar(), new Bar()};
private List<Bar> listBar = new ArrayList<Bar>();
{
listString.add("listString1");
listString.add("listString2");
listString.add("listString3");
map.put("x", "s11111x");
map.put("y", "s22222y");
map.put("z", "s33333z");
listBar.add(new Bar());
listBar.add(new Bar());
listBar.add(new Bar());
}
public String getvString() {
return vString;
}
public void setvString(String vString) {
this.vString = vString;
}
public char getVchar() {
return vchar;
}
public void setVchar(char vchar) {
this.vchar = vchar;
}
public byte getVbyte() {
return vbyte;
}
public void setVbyte(byte vbyte) {
this.vbyte = vbyte;
}
public short getVshort() {
return vshort;
}
public void setVshort(short vshort) {
this.vshort = vshort;
}
public int getVint() {
return vint;
}
public void setVint(int vint) {
this.vint = vint;
}
public long getVlong() {
return vlong;
}
public void setVlong(long vlong) {
this.vlong = vlong;
}
public float getVfloat() {
return vfloat;
}
public void setVfloat(float vfloat) {
this.vfloat = vfloat;
}
public double getVdouble() {
return vdouble;
}
public void setVdouble(double vdouble) {
this.vdouble = vdouble;
}
public boolean isVboolean() {
return vboolean;
}
public void setVboolean(boolean vboolean) {
this.vboolean = vboolean;
}
public Date getDddd() {
return dddd;
}
public void setDddd(Date dddd) {
this.dddd = dddd;
}
public Date getV_Date() {
return v_Date;
}
public void setV_Date(Date v_Date) {
this.v_Date = v_Date;
}
public Date getvDate() {
return vDate;
}
public void setvDate(Date vDate) {
this.vDate = vDate;
}
public Object getVnull() {
return vnull;
}
public void setVnull(Object vnull) {
this.vnull = vnull;
}
public String[] getAvString() {
return avString;
}
public void setAvString(String[] avString) {
this.avString = avString;
}
public int[] getAvint() {
return avint;
}
public void setAvint(int[] avint) {
this.avint = avint;
}
public boolean[] getAvboolean() {
return avboolean;
}
public void setAvboolean(boolean[] avboolean) {
this.avboolean = avboolean;
}
public List<String> getListString() {
return listString;
}
public void setListString(List<String> listString) {
this.listString = listString;
}
public Map<String, String> getMap() {
return map;
}
public void setMap(Map<String, String> map) {
this.map = map;
}
public Bar getBar() {
return bar;
}
public void setBar(Bar bar) {
this.bar = bar;
}
public Bar[] getAvBar() {
return avBar;
}
public void setAvBar(Bar[] avBar) {
this.avBar = avBar;
}
public List<Bar> getListBar() {
return listBar;
}
public void setListBar(List<Bar> listBar) {
this.listBar = listBar;
}
}
package lavasoft.stu.json; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.serializer.SerializeConfig; import com.alibaba.fastjson.serializer.SimpleDateFormatSerializer; import java.util.Date; import java.util.Random; /** * Created by IntelliJ IDEA. * * @author leizhimin 11-11-22 上午9:15 */ public class Bar { public static SerializeConfig mapping = new SerializeConfig(); private String barName; private int barAge; private Date barDate = new Date(); static { mapping.put(Date.class, new SimpleDateFormatSerializer("yyyy-MM-dd")); } { Random r = new Random(); barName = "sss_"+String.valueOf(r.nextFloat()); barAge = r.nextInt(); } public static void main(String[] args) { Object obj = JSON.toJSON(new Bar()); String x1 = JSON.toJSONString(new Bar(), true); System.out.println(x1); String x2 = JSON.toJSONString(new Bar(), mapping); System.out.println(x2); } public String getBarName() { return barName; } public void setBarName(String barName) { this.barName = barName; } public int getBarAge() { return barAge; } public void setBarAge(int barAge) { this.barAge = barAge; } public Date getBarDate() { return barDate; } public void setBarDate(Date barDate) { this.barDate = barDate; } @Override public String toString() { return "Bar{" + "barName='" + barName + '\'' + ", barAge=" + barAge + ", barDate=" + barDate + '}'; } }
package lavasoft.stu.json; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.serializer.SerializeConfig; import com.alibaba.fastjson.serializer.SimpleDateFormatSerializer; import java.util.*; /** * Created by 2IntelliJ IDEA. * * @author leizhimin 11-11-22 上午9:45 */ public class Test { private static SerializeConfig mapping = new SerializeConfig(); static { mapping.put(Date.class, new SimpleDateFormatSerializer("yyyy-MM-dd HH:mm:ss")); } public static void main(String[] args) { Foo f1 = new Foo(); Date date = new Date(); String text = JSON.toJSONString(date, mapping); System.out.println(text); System.out.println(JSON.toJSONString(f1, true)); String x2 =JSON.toJSONString(f1, mapping); System.out.println(x2); } public static void json2List(){ //List -> JSON array List<Bar> barList = new ArrayList<Bar>(); barList.add(new Bar()); barList.add(new Bar()); barList.add(new Bar()); String json= JSON.toJSONString(barList, true); System.out.println(json); //JSON array -> List List<Bar> barList1 = JSON.parseArray(json,Bar.class); for (Bar bar : barList1) { System.out.println(bar.toString()); } } public static void json2Map(){ //Map -> JSON Map<String,Bar> map = new HashMap<String, Bar>(); map.put("a",new Bar()); map.put("b",new Bar()); map.put("c",new Bar()); String json = JSON.toJSONString(map,true); System.out.println(json); //JSON -> Map Map<String,Bar> map1 = (Map<String,Bar>)JSON.parse(json); for (String key : map1.keySet()) { System.out.println(key+":"+map1.get(key)); } } public static void array2JSON(){ String[] arr_String = {"a","b","c"}; String json_arr_String = JSON.toJSONString(arr_String,true); System.out.println(json_arr_String); JSONArray jsonArray = JSON.parseArray(json_arr_String); for (Object o : jsonArray) { System.out.println(o); } System.out.println(jsonArray); } public static void array2JSON2(){ Bar[] arr_Bar = {new Bar(),new Bar(),new Bar()}; String json_arr_Bar = JSON.toJSONString(arr_Bar,true); System.out.println(json_arr_Bar); JSONArray jsonArray = JSON.parseArray(json_arr_Bar); for (Object o : jsonArray) { System.out.println(o); } System.out.println(jsonArray); } public static void map2JSON(){ Map map = new HashMap(); map.put("a","aaa"); map.put("b","bbb"); map.put("c","ccc"); String json=JSON.toJSONString(map); System.out.println(json); Map map1 = JSON.parseObject(json); for (Object o : map.entrySet()) { Map.Entry<String,String> entry = (Map.Entry<String,String>)o; System.out.println(entry.getKey()+"--->"+entry.getValue()); } } }Arahan:
SerializeConfig: Ia adalah konfigurasi khas untuk beberapa proses bersiri dalam proses bersiri Ia digunakan di sini untuk menentukan format tarikh.
Untuk proses bersiri jenis penuh yang memerlukan jenis, anda perlu memanggil kaedah JSON.toJSONStringZ().
Apabila anda perlu mencantikkan output, anda perlu menghidupkan suis pengindahan bersiri dan tetapkan parameter sebenar dalam kaedah.
"2011-11-23 23:30:33" { "avBar":[{ "barAge":174398800, "barDate":1322062233062, "barName":"sss_0.62378174" },{ "barAge":38938962, "barDate":1322062233062, "barName":"sss_0.36014742" }], "avString":["aaa","bbb","ccc"], "avboolean":[true,false,true,true], "avint":[1,2,3,4], "bar":{ "barAge":1601495948, "barDate":1322062233062, "barName":"sss_0.46644872" }, "dddd":1322062233046, "listBar":[ { "barAge":-1090113522, "barDate":1322062233062, "barName":"sss_0.83562374" }, { "barAge":478603194, "barDate":1322062233062, "barName":"sss_0.59483266" }, { "barAge":1118357669, "barDate":1322062233062, "barName":"sss_0.9961642" } ], "listString":[ "listString1", "listString2", "listString3" ], "map":{"x":"s11111x","y":"s22222y","z":"s33333z"}, "v_Date":1322062233046, "vboolean":false, "vbyte":64, "vchar":"x", "vdouble":22.203, "vfloat":12.1, "vint":65535, "vlong":9999999, "vshort":128 } {"avBar":[{"barAge":174398800,"barDate":"2011-11-23 23:30:33","barName":"sss_0.62378174"},{"barAge":38938962,"barDate":"2011-11-23 23:30:33","barName":"sss_0.36014742"}],"avString":["aaa","bbb","ccc"],"avboolean":[true,false,true,true],"avint":[1,2,3,4],"bar":{"barAge":1601495948,"barDate":"2011-11-23 23:30:33","barName":"sss_0.46644872"},"dddd":"2011-11-23 23:30:33","listBar":[{"barAge":-1090113522,"barDate":"2011-11-23 23:30:33","barName":"sss_0.83562374"},{"barAge":478603194,"barDate":"2011-11-23 23:30:33","barName":"sss_0.59483266"},{"barAge":1118357669,"barDate":"2011-11-23 23:30:33","barName":"sss_0.9961642"}],"listString":["listString1","listString2","listString3"],"map":{"x":"s11111x","y":"s22222y","z":"s33333z"},"v_Date":"2011-11-23 23:30:33","vboolean":false,"vbyte":64,"vchar":"x","vdouble":22.203,"vfloat":12.1,"vint":65535,"vlong":9999999,"vshort":128} Process finished with exit code 0
Contoh ujian kecil:
JSONObject json = new JSONObject(); json.put("aa", "11"); json.put("bb", "22"); json.put("cc", "33");String jsonStr = json.toString(); System.out.println(jsonStr);// {"aa":"11","bb":"22","cc":"33"} System.out.println(JSONObject.parseObject(jsonStr).get("aa"));// 11String o = "{'area':{'area':'1','pagetype':'home'},'pagetype':'home'}"; System.out.println(((Map) JSONObject.parseObject(o).get("area")).get("area"));// 1String text = JSON.toJSONString(o);Map<String, Object> userMap = JSON.parseObject(o, new TypeReference<Map<String, Object>>() {}); System.out.println(((Map) userMap.get("area")).get("NotExsit"));// nullSystem.out.println(JSON.toJSONString((Map) userMap.get("area")));// {"area":"1","pagetype":"home"}
fastjson telah melepasi semua ujian dengan sangat baik, dan prestasi fungsinya adalah No. 1. Saya suka kualiti kod sumbernya sangat tinggi, dan pengarang juga telah mengambilnya bersusah payah untuk mencapai prestasi terbaik Yang terbaik, benar-benar unggul daripada perpustakaan json yang lain.
Jika anda perlu mendapatkan maklumat lain yang berkaitan, anda boleh mengklik: objek atau tatasusunan Fastjson ke JSON untuk rujukan bersama.