Jackson最適化使用例
3822 ワード
JSONの3つの処理方法Jacksonは、3つのオプションのJSON処理方法(1つの方法とその2つの変形)を提供します.
ストリーミングAPI:(「インクリメンタル分析/生成」とも呼ばれる)JSONコンテンツを個別イベントとして読み取りおよび書き込みます.
org.codehaus.jackson.JsonParser読み、org.codehaus.jackson.JsonGeneratorが書きます.
StAX APIの励振.
ツリーモデル:JSONドキュメントの可変メモリツリーの表示形式を提供します.
org.codehaus.jackson.map.ObjectMapper生成ツリー;ツリーはJsonNodeノードセットを構成します.
ツリーモデルはXML DOMに似ています.
データバインディング:JSONとPOJOは互いに変換し、属性アクセサの規則または注釈に基づいている.
2つのバリエーションがあります.単純で完全なデータバインド:単純データバインド:Java Map、List、String、Numbers、BooleanおよびNull値からを変換する
完全なデータバインディング:任意のJava beanタイプ(および前述の「単純」タイプ)からを変換する
org.codehaus.jackson.map.ObjectMapperは2つの変種に対して,グループ化(marshalling)処理(JSON書き込み)と逆グループ化(unmarshalling,JSON読み)を行う.
JAXB励起下の注釈に基づく(コード優先)変種.
使用の観点から、これら3つの方法の使い方をまとめると以下のようになります.
ストリーミングAPI:パフォーマンスが最適な方法(最小オーバーヘッド、最も高速な読み取り/書き込み、その他の2つはそれに基づいて実現されます).
データバインド:最も便利な方法を使用します.
ツリーモデル:最も柔軟な方法.
ええ、すべてのコードを直接貼ってください.言うべきことはすべてコードの中にあります.
ストリーミングAPI:(「インクリメンタル分析/生成」とも呼ばれる)JSONコンテンツを個別イベントとして読み取りおよび書き込みます.
org.codehaus.jackson.JsonParser読み、org.codehaus.jackson.JsonGeneratorが書きます.
StAX APIの励振.
ツリーモデル:JSONドキュメントの可変メモリツリーの表示形式を提供します.
org.codehaus.jackson.map.ObjectMapper生成ツリー;ツリーはJsonNodeノードセットを構成します.
ツリーモデルはXML DOMに似ています.
データバインディング:JSONとPOJOは互いに変換し、属性アクセサの規則または注釈に基づいている.
2つのバリエーションがあります.単純で完全なデータバインド:単純データバインド:Java Map、List、String、Numbers、BooleanおよびNull値からを変換する
完全なデータバインディング:任意のJava beanタイプ(および前述の「単純」タイプ)からを変換する
org.codehaus.jackson.map.ObjectMapperは2つの変種に対して,グループ化(marshalling)処理(JSON書き込み)と逆グループ化(unmarshalling,JSON読み)を行う.
JAXB励起下の注釈に基づく(コード優先)変種.
使用の観点から、これら3つの方法の使い方をまとめると以下のようになります.
ストリーミングAPI:パフォーマンスが最適な方法(最小オーバーヘッド、最も高速な読み取り/書き込み、その他の2つはそれに基づいて実現されます).
データバインド:最も便利な方法を使用します.
ツリーモデル:最も柔軟な方法.
ええ、すべてのコードを直接貼ってください.言うべきことはすべてコードの中にあります.
package com.wujintao.json;
import java.io.IOException;
import java.util.Date;
import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.map.ObjectReader;
import org.codehaus.jackson.map.ObjectWriter;
import org.junit.Test;
/**
* http://wiki.fasterxml.com/JacksonDownload
* http://wiki.fasterxml.com/JacksonInFiveMinutes
* http://wiki.fasterxml.com/JacksonBestPracticesPerformance
* http://jackson.codehaus.org/1.8.8/javadoc/index.html
* http://wiki.fasterxml.com/ObjectReader
* https://github.com/FasterXML/jackson-docs/wiki/ObjectWriter
* jars:jackson-core-lgpl-1.8.10.jar,jackson-mapper-lgpl-1.8.10.jar
*
* 1. , ,Jackson > Gson > Json-lib。Jackson Json-lib 10
* 2.JSON-lib , JDK15, Jackson
* 3. jackson , ,json-lib
*
*/
public class TestCase {
@Test
public void test() throws JsonGenerationException, JsonMappingException,
IOException {
long start = new Date().getTime();
ObjectMapper mm = new ObjectMapper(); // can reuse, share
Person pp = new Person();
pp.setAdd("beijing");
pp.setAge(11);
pp.setSalary(1.1);
pp.setSex(' ');
String jj = mm.writeValueAsString(pp);
System.out.println(jj);
Person pp2 = mm.readValue(jj, Person.class);
System.out.println(pp2);
long end = new Date().getTime();
System.out.println("using ObjectMapper cost:"+(end-start)+"ms");
System.out.println("=================================");
// 7. Prefer ObjectReader/ObjectWriter over ObjectMapper
// Although the main reason to prefer these objects is thread-safety
// (and thus correctness),there may be performance benefits as well
// 8.When reading a root-level sequence of POJOs,
// readValues() method of ObjectReader can be much more efficient
// than doing explicit iteration using ObjectMapper.readValue() method.
long start2 = new Date().getTime();
ObjectMapper mapper = new ObjectMapper();
Person person = new Person();
person.setAdd("beijing");
person.setAge(11);
person.setSalary(1.1);
person.setSex(' ');
ObjectWriter writer = mapper.viewWriter(Person.class);
String json = writer.writeValueAsString(person);
System.out.println(json);
// we'll be reading instances of MyBean
ObjectReader reader = mapper.reader(Person.class);
// and then do other configuration, if any, and read:
Person result = reader.readValue(json);
System.out.println(result);
long end2 = new Date().getTime();
System.out.println("using ObjectReader/ObjectWriter cost:"+(end2-start2)+"ms");
// ObjectReader/ObjectWriter
}
// fast-json、Genson
}