JSON解析ツール比較、主要GSONとFastJSON

9344 ワード

回転:http://www.cnblogs.com/kunpengit/p/4001680.html
一、各JSON技術の紹介と優劣
1.json-lib json-libは最初は最も広範なjson解析ツールを使っていました。json-libの悪いところは確かに多くの第三者カバンに依存しています。
comons-beanutils.jarを含み、comons-collection s-3.jar、comons-lang-2.6.jar、comons-loging-1.jar、ezmorp-1.06.jar、
複雑なタイプの変換については、json-libはjsonからbeanに変換するにはまだ欠陥があります。例えば、一つのクラスの中にもう一つの種類のlistまたはmap集合があります。json-libはjsonからbeanへの変換に問題があります。
Json-libは機能と性能の上ですべて今のインターネット化の需要を満たすことができません。
2.オープンソースのJacksonはJson-libフレームより、Jacksonが依頼しているjarカバンが少なく、使いやすく、性能も比較的高いです。
それにジャックソンのコミュニティは比較的に活発で、更新のスピードも比較的に速いです。
Jacksonは複雑なタイプのjson変換beanに問題が発生し、いくつかの集合Map、Listの変換に問題が発生します。
Jacksonは複雑なタイプのbeanに対してJsonを変換して、変換のjsonフォーマットは標準のJsonフォーマットではありません。
3.GoogleのGson Gsonは、現在最も機能的なJson解析神器であり、Gsonは当初Googleの社内需要に応じてGoogleが自ら開発したものであり、
2008年5月に第1版が公開されて以来、多くの企業やユーザーに利用されてきました。
Gsonの応用は主にtoJsonとfrom Jsonの2つの変換関数で、依存がなくて、例外の余分なjarを必要としないで、直接JDKの上で走ることができます。
このようなオブジェクト変換を使用する前に、まずオブジェクトのタイプを作成し、そのメンバーがJSON文字列を対応するオブジェクトにうまく変換することができます。
クラスの中にgetとsetの方法がある限り、Gsonは複雑なタイプのjsonをbeanまたはbeanからjsonに変換することができます。JSON解析の神器です。
Gsonは機能の面では申し分ないですが、性能の面ではFastJsonより差があります。
4.アリババのFastJson FastjsonはJava言語で作成された高性能のJSONプロセッサで、アリババが開発しました。
依存性がなく、例外的に追加のjarは必要なく、直接JDKを走ることができます。
FastJsonは複雑なタイプのBean変換Jsonで問題が発生し、引用のタイプが出現し、Jsonの変換ミスを招き、引用を制定する必要があります。
FastJsonは独自のアルゴリズムを採用して、パースの速度を極限まで高めて、すべてのjsonライブラリを上回ります。
以上のように、Jsonの4つの技術の比較は、プロジェクトの選定時にGoogleのGsonとアリババのFastJsonの2つを使って並行して使用することができます。機能の要求だけでは、性能の要求がありません。googleのGsonを使用することができます。
性能上の要求があれば、Gsonを使って、beanをjsonに変換してデータの正確さを確保し、FastJsonを使ってJsonをBeanに変換します。
二番目です。使用概要
1、GoogleのGsonバッグの使用概要。Gson類:Jsonの最も基本的なツール類を解析します。
JSON-Json Elementsの解析ツリーを解析します。
JsonElement類:クラス代表のJSON元素
Json Object類:JSON対象タイプ
JsonAray類:JsonObject配列
Type Tokenクラス:一般的なListのようなタイプのtypeを作成します。
(1)maven依存
comple.google.co.gson
gson
2.2.4
(2)基礎転換類
public class Book{
private String id;
private String name;
public Book() {
super();
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public class Student{
private String name;
private int age;
private String sex;
private String describe;
private Set books;
public Student() {
super();
}
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;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public Set getBooks() {
return books;
}
public void setBooks(Set books) {
this.books = books;
}
public String getDescribe() {
return describe;
}
public void setDescribe(String describe) {
this.describe = describe;
}
}
(3)bean変換Json Gson=new Gson()
String Json=gson.toJson(obj)
objは対象です
(4)Json変換bean Gson=new Gson()
String Json=「\」id\":\"2\",\"name\"\"Json技術\"";
Book book=gson.from Json(json,Book.class)
(5)Json変換の複雑なbean、例えばList、Setはjsonを複雑なタイプのbeanに変換します。Type Tokenを使う必要があります。
Gson=new Gson()
String Json=「\」id\":\"1\",\"name\":\"Json技術\",\"id\":\"2\"name\"":\"java技術\"
//JsonをListに変換する
List list=gson.from Json(json,new Type Token<LIST>(){}.getType();
//JsonをSetに変換する
Set set=gson.from Json(json,new Type Token<SET>(){}.getType();
(6)Jsonオブジェクトを通じて直接Json及びいくつかのJsonを操作するツール
a)Json String Json=「\」id\":\"1\",\"name\"":\"Json技術\",\"id\":\"2\",\"name\""\"java技術\";
Gson=new Gson Buider()set Printing()create()
Json Parsser jp=new Json Parsser();
Jsone Element je=jp.parse(json)
Json=gson.toJson(je)
b)文字列がjsonかどうかは、キャプチャーの異常によって判定されます。json String json=「\」id\\"\"1\"で、\"name\"":\"Json技術\",",\"id\\\"":\"2\"で、\"name\"java技術\";
bollan json Flags;
try{
new Json Parse.get Ason Object()
json FlagG=true;
}catch(Exception e){
json Flags=false;
)
c)jsonからプロパティString json=「\」id\\"\"1\",\"name\":\"Json技術\""";を取得します。
String propertyName='id'
String propertyValue="
try{
Json Parsser Json Parsser=new Json Parsser();
Jsone Element element=json Parse(json)
JsonObject jsonObj=element.get AsonObject()
propertyValue=jsonObj.get.toString()
}catch(Exception e){
propertyValue=null;
)
d)jsonの中のある属性String json=「\」id\\\"\"1\"を除いて、\"name\":\"Json技術\""";
String propertyName='id'
Json Parsser Json Parsser=new Json Parsser();
Jsone Element element=json Parse(json)
JsonObject jsonObj=element.get AsonObject()
jsonObj.remove;
json=json Obj.toString()
e)Jsonに属性String json=「\」id\\"\"1\",\"name\":\"Json技術\""";を追加します。
String propertyName='desc'
Object propertyValue=「json各種技術の調査」
Json Parsser Json Parsser=new Json Parsser();
Jsone Element element=json Parse(json)
JsonObject jsonObj=element.get AsonObject()
jsonObj.addProperty(propertyName,new Gson().toJson(propertyValue);
json=json Obj.toString()
f)Jsonの属性String json=「\」id\\\"\"1\",\"name\":\"Json技術\""";を修正します。
String propertyName='name'
Object propertyValue=「json各種技術の調査」
Json Parsser Json Parsser=new Json Parsser();
Jsone Element element=json Parse(json)
JsonObject jsonObj=element.get AsonObject()
jsonObj.remove;
jsonObj.addProperty(propertyName,new Gson().toJson(propertyValue);
json=json Obj.toString()
g)JsonにはプロパティString json=「\」id\"\"1\"があるかどうかを判断し、\"name\":\"Json技術\""""";
String propertyName='name'
bollan isContins=false;
Json Parsser Json Parsser=new Json Parsser();
Jsone Element element=json Parse(json)
JsonObject jsonObj=element.get AsonObject()
isContins=jsonObj.has;
h)Jsonにおける日付フォーマットの処理Gson Builder=new Gson Builder()
builder.set DateFormat(「yyy-M-dd HH:mm:ss.SSS」);
Gson=builder.creat()
そして、gsonオブジェクトを使ってJsonの処理を行い、日付Date類のオブジェクトが現れたら、設定された形式で処理します。
i)JsonにおけるHtmlへの変換
Gson=new Gson()
このようなオブジェクトはデフォルトではHtmlを変換しますが、転送したくないなら次の方法を使います。
Gson Builder builder=new Gson Builder()
builder.disableHtmlEscaping()
Gson=builder.creat()
2、アリババのFastJsonバッグの使用概要。
(1)maven依存
comp.alibabababababa
fastjson
1.1.22
(2)基礎変換類同上
(3)bean変換jsonオブジェクトをフォーマットに変換するjson
JSON.toJSONString(Obj,true)
オブジェクトを非フォーマットのJsonに変換します。
JSON.toJSONString(Obj,false);
obj設計対象
複雑なタイプの変換については、重複した参照は、json列に変換された後、json列に参照される文字、たとえば$ref":"0".book[1]が現れる。
Student stu=new Student()
Set book s=new HashSet()
Book book=new Book()
book s.add(book)
stu.set Book s(book s);
List list=new ArayList()
for(int i=0;i<5;i+)
list.add(stu)
String json=JSON.toJSONString(list,true)
(4)json変換ben String json=「\」id\"\"2\"、\"name\":\"Json技術\""";
Book book=JSON.parseObject(json,Book.class)
(5)json変換の複雑なbean、例えばList、Map String json=「\」id\":\"1\"、\"name\":\"Json技術\""、\"id\\":\"2\"、\"name\""、\"java技術\"";
//JsonをListに変換する
List list=JSON.parseObject(json,new Type Reference<ARRAYLIST>(){}
//JsonをSetに変換する
Set set=JSON.parseObject(json,new Type Reference<HASHSET>(){}
(6)Jsonオブジェクトで直接Jsonを操作する
a)jsonからプロパティString propertyName='id'を取得する。
String propertyValue="
String Json=「\」id\":\"1\",\"name\"\"Json技術\"";
JSONObject oj=JSON.parseObject(json)
propertyValue=obj.get;
b)jsonの中のある属性String propertyName='id'を除く。
String propertyValue="
String Json=「\」id\":\"1\",\"name\"\"Json技術\"";
JSONObject oj=JSON.parseObject(json)
Set set=obj.keySet()
propertyValue=set.remove;
json=obj.toString()
c)jsonに属性String propertyName='desc'を追加する。
Object propertyValue=「jsonのおもちゃ」
String Json=「\」id\":\"1\",\"name\"\"Json技術\"";
JSONObject oj=JSON.parseObject(json)
Obj.put;JSON.toJSONString;
json=obj.toString()
d)jsonの属性String propertyName='name'を修正する。
Object propertyValue=「jsonのおもちゃ」
String Json=「\」id\":\"1\",\"name\"\"Json技術\"";
JSONObject oj=JSON.parseObject(json)
Set set=obj.keySet()
if(set.co ntains)
Obj.put;JSON.toJSONString;
json=obj.toString()
e)jsonにプロパティString propertyName='name'があるかどうかを判断する。
bollan isContine=false;
String Json=「\」id\":\"1\",\"name\"\"Json技術\"";
JSONObject oj=JSON.parseObject(json)
Set set=obj.keySet()
isConttain=set.co ntains;
f)Jsonにおける日付フォーマットの処理Object obj=new Date()
String json=JSON.toJSONStringWithDateFormat(obj,「yyy-M-dd HH:mm:ss.SSS」);
JSON.toJSONStringWithDateFormatを使用して、この方法は設定された日付フォーマットを使って日付を変換することができます。