json、javaBeanが互いに変換するツール--json-lib
14054 ワード
JSONに接触してから2年も経っていないが、最初にJSONに接触したのは軽量級のデータ交換フォーマットであることしか知らなかった.JavaScriptのサブセットに基づいています.その後はあまり使われなくなり、Easyuiを使い始め、Jsonと付き合わざるを得なくなった.しかし、Jsonに関する知識も整理されていない.最近まで、プロジェクトをしていて、フロントの要求が特に高く、easyuiが提供した方法だけでは需要を満たすことができなかったので、jquery、jsonに対して、もう一度よく使いました.今回は私に大きな収穫をもたらした.次にjavaでjsonを解析するツールについてお話しします.
今私は主に3種類あることを知っています:json-lib、jackson、fastjson.その中でjson-libは比較的早いです.今回のプロジェクトでもjson-libを使用していますが、まずjson-libの使用についてお話しします.
具体的なjson-libに関する知識はもちろん、簡単に言えばjson-libは何ができるのか、Json-libはJavaオブジェクトをjson形式の文字列に変換したり、Javaオブジェクトをxml形式のドキュメントに変換したりすることができ、同じようにjson文字列をJavaオブジェクトに変換したり、xml文字列をJavaオブジェクトに変換したりすることができます.
ここでは主にjsonの2つのクラスを用いた:jsonObjecとjsonArray.
JSOnObjectはJavaオブジェクトをjsonに変換するObject形式であり、JSOnArrayはJavaオブジェクトをjsonに変換するArray形式である.
では、jsonのObject形式、Array形式とは何ですか.
わかりやすい方法で、いわゆるjsonのObject形式は、JavaMapのようなキー値のペアのようなカッコの中に格納されています.例えば、{name:'hoojo’,age:24};
ではjsonのArray形式は?
中括弧、括弧の配列です.例えば:[‘json’,true,22];
一、使用前提
まずjson-libツールパッケージを公式にダウンロードします
ダウンロード先:http://sourceforge.net/projects/json-lib/files/json-lib/json-lib-2.4/
現在最新のバージョンは2.4で、この例ではv 2を使用しています.3;json-libには、次の依存パッケージが必要です.
jakarta commons-lang 2.5
jakarta commons-beanutils 1.8.0
jakarta commons-collections 3.2.1
jakarta commons-logging 1.1.1
ezmorph 1.0.6
公式サイト:http://json-lib.sourceforge.net/
これらのJarをweb-infoの下のlibにコピーします.
二、javaBean
三、JSONオブジェクト逆シーケンス化javaオブジェクト/集合
json-libを使用するには、次のパッケージを導入する必要があります.
これらは必要に応じて導入され,すべて導入されるわけではない.
1、JSON文字列をjavaObjectに変換する
detail = (JobContentDetail)JSONObject.toBean(jsonobj, JobContentDetail.class); try {labourservice.saveEntity(detail);} catch (Exception e) {e.printStackTrace();return createErrorMessage(e.getMessage()).toString();}}return createSuccessMessage("操作成功!").toString();}
今私は主に3種類あることを知っています:json-lib、jackson、fastjson.その中でjson-libは比較的早いです.今回のプロジェクトでもjson-libを使用していますが、まずjson-libの使用についてお話しします.
具体的なjson-libに関する知識はもちろん、簡単に言えばjson-libは何ができるのか、Json-libはJavaオブジェクトをjson形式の文字列に変換したり、Javaオブジェクトをxml形式のドキュメントに変換したりすることができ、同じようにjson文字列をJavaオブジェクトに変換したり、xml文字列をJavaオブジェクトに変換したりすることができます.
ここでは主にjsonの2つのクラスを用いた:jsonObjecとjsonArray.
JSOnObjectはJavaオブジェクトをjsonに変換するObject形式であり、JSOnArrayはJavaオブジェクトをjsonに変換するArray形式である.
では、jsonのObject形式、Array形式とは何ですか.
わかりやすい方法で、いわゆるjsonのObject形式は、JavaMapのようなキー値のペアのようなカッコの中に格納されています.例えば、{name:'hoojo’,age:24};
ではjsonのArray形式は?
中括弧、括弧の配列です.例えば:[‘json’,true,22];
一、使用前提
まずjson-libツールパッケージを公式にダウンロードします
ダウンロード先:http://sourceforge.net/projects/json-lib/files/json-lib/json-lib-2.4/
現在最新のバージョンは2.4で、この例ではv 2を使用しています.3;json-libには、次の依存パッケージが必要です.
jakarta commons-lang 2.5
jakarta commons-beanutils 1.8.0
jakarta commons-collections 3.2.1
jakarta commons-logging 1.1.1
ezmorph 1.0.6
公式サイト:http://json-lib.sourceforge.net/
これらのJarをweb-infoの下のlibにコピーします.
二、javaBean
<span style="font-family:KaiTi_GB2312;font-size:18px;">@Entity
@Table(name = "job_content_detail")
public class JobContentDetail implements BaseEntity {
<span style="white-space:pre"> </span>@Id
@GeneratedValue(generator = "uuid")
@GenericGenerator(name = "uuid", strategy = "uuid.hex")
@Column(name = "ID", length = 32, nullable = false)
private String id;
@Column(name = "TS", length = 20, nullable = true)
private String ts;
@Column(name = "DR", length = 10, nullable = true)
private Integer dr;
@Column(name = "JOBCONTENTMAINID", length = 32, nullable = true)
private String jobcontentmainid;
@Column(name = "PRODUCTID", length = 32, nullable = true)
private String productid;
@Column(name = "PRODUCTUSAGE", length = 22, precision = 10, nullable = true)
private String productusage;
@Column(name = "ITEMQTY", length = 22, precision = 10, nullable = true)
private Double itemqty;
@Column(name = "BUILDERQTY", length = 22, precision = 10, nullable = true)
private Double builderqty;
@Column(name = "LABOURUNITID", length = 22, precision = 10, nullable = true)
private String labourunitid;
@Column(name = "LABOURFACTOR", length = 22, precision = 10, nullable = true)
private Double labourfactor;
@Column(name = "LABOURFACTOR2", length = 22, precision = 10, nullable = true)
private Double labourfactor2;
@Column(name = "LABOURFACTOR3", length = 22, precision = 10, nullable = true)
private Double labourfactor3;
@Column(name = "ManHours", length = 22, precision = 10, nullable = true)
private Double manhours;
@Column(name = "LabourRate", length = 22, precision = 10, nullable = true)
private Double labourrate;
@Column(name = "Total", length = 22, precision = 10, nullable = true)
private Double total;
@Column(name = "MATERIALUNITID", length = 32, nullable = true)
private String materialunitid;
@Column(name = "WASTEFACTOR", length = 22, precision = 10, nullable = true)
private Double wastefactor;
@Column(name = "MATERIALTOTAL", length = 22, precision = 10, nullable = true)
private Double materialtotal;
@Column(name = "MARERIALRATE", length = 22, precision = 10, nullable = true)
private Double marerialrate;
@Column(name = "MANUALLYKEYED", length = 2, nullable = true)
private String manuallykeyed;
@Column(name = "PRODUCTRATE", length = 22, precision = 10, nullable = true)
private Double productrate;
@Column(name = "PRODUCTMANUALENTRY", length = 150, nullable = true)
private String productmanualentry;
@Column(name = "LevelOfDifficulty", length = 22, precision = 10, nullable = true)
private Double levelofdifficulty;
@Column(name = "MATERIALQTY", length = 22, precision = 10, nullable = true)
private Double materialqty;
@Column(name = "MATERIALBUILDERQTY", length = 22, precision = 10, nullable = true)
private Double materialbuilderqty;
@Column(name = "MERCHANT1PRICE", length = 22, precision = 10, nullable = true)
private Double merchant1price;
@Column(name = "MERCHANT2PRICE", length = 22, precision = 10, nullable = true)
private Double merchant2price;
@Column(name = "MERCHANT3PRICE", length = 22, precision = 10, nullable = true)
private Double merchant3price;
@Column(name = "MERCHANT4PRICE", length = 22, precision = 10, nullable = true)
private Double merchant4price;
@Column(name = "MATERIALADJUSTMENT", length = 22, precision = 10, nullable = true)
private Double materialadjustment;
@Column(name = "SubContractorLabour", length = 2, nullable = true)
private String subcontractorlabour;
@Column(name = "SubContractorMaterial", length = 2, nullable = true)
private String subcontractormaterial;
@Column(name = "ProductName", length = 1000, nullable = true)
private String productname;
@Column(name="productcode",length=10,nullable=true)
private String productcode;
<span style="white-space:pre"> </span>// ge,set ,
}</span>
三、JSONオブジェクト逆シーケンス化javaオブジェクト/集合
json-libを使用するには、次のパッケージを導入する必要があります.
<span style="font-family:KaiTi_GB2312;font-size:18px;">import net.sf.json.JSON;
import net.sf.json.JSONArray;
import net.sf.json.JSONFunction;
import net.sf.json.JSONObject;
import net.sf.json.JSONSerializer;
import net.sf.json.JsonConfig;
import net.sf.json.processors.JsonValueProcessor;
import net.sf.json.util.PropertyFilter;
import net.sf.json.xml.XMLSerializer;</span>
これらは必要に応じて導入され,すべて導入されるわけではない.
1、JSON文字列をjavaObjectに変換する
<span style="font-family:KaiTi_GB2312;font-size:18px;"><span style="white-space:pre"> </span>@Override
@RequestMapping("/save.do")
@ResponseBody
public Object save(HttpServletRequest request) {
// json
String inserted = request.getParameter("newRow");</span>
<span style="font-family:KaiTi_GB2312;font-size:18px;"><span style="white-space:pre"> </span>// javabean
JobContentDetail detail = new JobContentDetail();</span>
<span style="font-family:KaiTi_GB2312;font-size:18px;"><span style="white-space:pre"> </span>// json ,
if(inserted != null){
// string jsonObject
JSONObject jsonobj = JSONObject.fromObject(inserted); </span>
<span style="font-family:KaiTi_GB2312;font-size:18px;"><pre name="code" class="java" style="color: rgb(51, 51, 51); font-size: 14px; line-height: 21px;"><span style="white-space:pre"> </span>// json <span style="font-family: 'Microsoft YaHei UI', 'Microsoft YaHei', SimSun, 'Segoe UI', Tahoma, Helvetica, sans-serif, 'Microsoft YaHei', Georgia, Helvetica, Arial, sans-serif, , PMingLiU, serif;"> </span></span>
detail = (JobContentDetail)JSONObject.toBean(jsonobj, JobContentDetail.class); try {labourservice.saveEntity(detail);} catch (Exception e) {e.printStackTrace();return createErrorMessage(e.getMessage()).toString();}}return createSuccessMessage("操作成功!").toString();}
2、jsonArray 转换成 java list具体代码和jsonObject转换成javabean一样,唯独不同的是,转javabean使用的是tobean,转list使用的是 toCollection.
<span style="font-family:KaiTi_GB2312;font-size:18px;"><span style="white-space:pre"> </span>JSONArray array =JSONArray.fromObject(ens.toString()); @SuppressWarnings("unchecked") List<JobContentDetail> listDetail=(List<JobContentDetail>)JSONArray.toCollection(array, JobContentDetail.class);</span>
四、javaオブジェクト/コレクションをjsonにシーケンス化する
個人的にはjavaBean/listをjsonに変換するのが簡単だと思います.コードを一歩一歩見てみましょう.まず、テストの準備コードは以下の通りです.<span style="font-family:KaiTi_GB2312;font-size:18px;">@SuppressWarnings({ "deprecation", "unchecked" }) public class JsonlibTest { private JSONArray jsonArray = null; private JSONObject jsonObject = null; private Student bean = null; @Before public void init() { jsonArray = new JSONArray(); jsonObject = new JSONObject(); bean = new Student(); bean.setAddress("address"); bean.setEmail("email"); bean.setId(1); bean.setName("haha"); Birthday day = new Birthday(); day.setBirthday("2010-11-22"); bean.setBirthday(day); } @After public void destory() { jsonArray = null; jsonObject = null; bean = null; System.gc(); } public final void fail(String string) { System.out.println(string); } public final void failRed(String string) { System.err.println(string); } }</span>
本格的な呼び出し変換を開始し、
1、まずjavabeanをjsonに変換し、<span style="font-family:KaiTi_GB2312;font-size:18px;"> fail("==============Java Bean >>> JSON Object=================="); fail(JSONObject.fromObject(bean).toString()); fail("==============Java Bean >>> JSON Array=================="); fail(JSONArray.fromObject(bean).toString());//array [] fail("==============Java Bean >>> JSON Object =================="); fail(JSONSerializer.toJSON(bean).toString());</span>
出力の結果は次のとおりです.==============Java Bean >>> JSON Object==================
{"address":"address","birthday":{"birthday":"2010-11-22"},"email":"email","id":1,"name":"haha"}
==============Java Bean >>> JSON Array==================
[{"address":"address","birthday":{"birthday":"2010-11-22"},"email":"email","id":1,"name":"haha"}]
==============Java Bean >>> JSON Object ==================
{"address":"address","birthday":{"birthday":"2010-11-22"},"email":"email","id":1,"name":"haha"}
2、javalistをjsonに変換する<span style="font-family:KaiTi_GB2312;font-size:18px;">@Test public void writeList2JSON() { fail("==============Java List >>> JSON Array=================="); List<Student> stu = new ArrayList<Student>(); stu.add(bean); bean.setName("jack"); stu.add(bean); fail(JSONArray.fromObject(stu).toString()); fail(JSONSerializer.toJSON(stu).toString()); }</span>
実行後の出力結果は次のとおりです.
==============Java List >>> JSON Array==================
[{"address":"address","birthday":{"birthday":"2010-11-22"},"email":"email","id":1,"name":"jack"},
{"address":"address","birthday":{"birthday":"2010-11-22"},"email":"email","id":1,"name":"jack"}]
[{"address":"address","birthday":{"birthday":"2010-11-22"},"email":"email","id":1,"name":"jack"},
{"address":"address","birthday":{"birthday":"2010-11-22"},"email":"email","id":1,"name":"jack"}]
コードをよく見ると、javabeanがjsonオブジェクトに変換されたときにjsonarrayを使用してjavabenをjsonarrayに変換する現象が見つかります.jsonarrayに変換するにはlistでなければならないわけではありません.kjavabeanであってもいいです.
リストセットを変換する場合は、JSOnArrayまたはJSOnSrializerが提供するシーケンス化方法を使用する必要があります.JSONObjectを使うならfromObjectメソッド変換リストに異常が発生します.通常、JSOnSrializerというJSONシーケンス化メソッドを使用すると、渡されたオブジェクトのタイプを自動的に認識し、対応するJSON文字列に変換します.
json-libはxmlとjavabeanの間の変換もできますが、まだ使用していません.具体的な内容は参考にしてください.
json-libの使用