JsonとJsonlibの使用
14224 ワード
JSON(JvaScript Object Notation)(公式サイト:http://www.json.org/)は軽量レベルのデータ交換フォーマットである.読みやすく、書きやすい.また、機械の解析と生成も容易である.JavaScript Programming Language、Standard ECMA-2623 rd Edition-December 1999のサブセットに基づいている.JSONは言語から完全に独立したテキストフォーマットを採用しているが、C言語ファミリーのような習わしも使用されている慣習(C,C++,C#,Java,JavaScript,Perl,Pythonなどを含む).これらの特性はJSONを理想的なデータ交換言語にした.
オブジェクトは無秩序な「'名前/値'ペア」コレクションです.オブジェクトは「{」(左かっこ)で始まり、「}」(右かっこ)で終わります.各「名前」の後に「:」(コロン)、「名前/値」のペア」の間に「,」(カンマ)で区切ります.
例:var json={"name":"Jack","age":90,"Marray":true};
2.値にはシーケンステーブル(An ordered list of values)があります.ほとんどの言語では配列(ArrayまたはList)と理解されています.
配列は値(value)の順序付き集合です.1つの配列は[](左中かっこ)で始まり、[](右中かっこ)で終わります.値の間には「,」(カンマ)で区切ります.
例:var json=["Jack","Rose","Tom",89,true,false];
Json-libはJavaクラスライブラリ(公式サイト:http://json-lib.sourceforge.net/)で、以下の機能を実現できます.
変換javabeans,maps,collections,java arrays,XMLはjsonフォーマットデータとなる
jsonフォーマットデータの変換javabeansオブジェクトJson-libに必要なjarパッケージ
commons-beanutils-1.8.3.jar
commons-collections-3.2.1.jar
commons-lang-2.6.jar
commons-logging-1.1.1.jar
ezmorph-1.0.6.jar
json-lib-2.4-jdk15.jar
package cn.sunzn.json;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import net.sf.json.JSONArray;
public class JsonLib {
public static void main(String[] args) {
/**
* Array Json
*/
String[] str = { "Jack", "Tom", "90", "true" };
JSONArray json = JSONArray.fromObject(str);
System.err.println(json);
/**
* ,
*/
Object[] o = { " ", " ", 89, true, 90.87 };
json = JSONArray.fromObject(o);
System.err.println(json);
/**
*
*/
List<String> list = new ArrayList<String>();
list.add("Jack");
list.add("Rose");
json = JSONArray.fromObject(list);
System.err.println(json);
/**
* set
*/
Set<Object> set = new HashSet<Object>();
set.add("Hello");
set.add(true);
set.add(99);
json = JSONArray.fromObject(set);
System.err.println(json);
}
}
実行結果は次のとおりです.
["Jack","Tom","90","true"]
[" "," ",89,true,90.87]
["Jack","Rose"]
[99,true,"Hello"]
2.JavaBean/MapをJSON列に解析します.JSOnObject解析を使用するには:
package cn.sunzn.json;
import java.util.HashMap;
import java.util.Map;
import net.sf.json.JSONObject;
public class JsonLib {
@SuppressWarnings("static-access")
public static void main(String[] args) {
/**
* HashMap
*/
Map<String, Object> map = new HashMap<String, Object>();
map.put("name", "Tom");
map.put("age", 33);
JSONObject jsonObject = JSONObject.fromObject(map);
System.out.println(jsonObject);
/**
* JavaBean
*/
Person person = new Person("A001", "Jack");
jsonObject = jsonObject.fromObject(person);
System.out.println(jsonObject);
/**
*
*/
map.put("person", person);
jsonObject = jsonObject.fromObject(map);
System.out.println(jsonObject);
}
}
実行結果は次のとおりです.
{"age":33,"name":"Tom"}
{"id":"A001","name":"Jack"}
{"person":{"id":"A001","name":"Jack"},"age":33,"name":"Tom"}
3.JsonConfigを使用したオーバーライド属性:JavaBean/Map用
package cn.sunzn.json;
import net.sf.json.JSONObject;
import net.sf.json.JsonConfig;
public class JsonLib {
public static void main(String[] args) {
JsonConfig config = new JsonConfig();
config.setExcludes(new String[] { "name" }); //
Person person = new Person("A001", "Jack");
JSONObject jsonObject = JSONObject.fromObject(person, config); //
System.out.println(jsonObject);
}
}
実行結果は次のとおりです.実行結果では、nameプロパティがフィルタされていることがわかります.
{"id":"A001"}
4.Json列をArrayに変換する:
package cn.sunzn.json;
import java.util.Arrays;
import net.sf.json.JSONArray;
public class JsonLib {
public static void main(String[] args) {
JSONArray jsonArray = JSONArray.fromObject("[89,90,99]");
Object array = JSONArray.toArray(jsonArray);
System.out.println(array);
System.out.println(Arrays.asList((Object[]) array));
}
}
実行結果は次のとおりです.
[Ljava.lang.Object;@1e5003f6
[89, 90, 99]
5.Json列をJavaBean/Mapに変換する:
package cn.sunzn.json;
import java.util.Map;
import net.sf.json.JSONObject;
public class JsonLib {
@SuppressWarnings("unchecked")
public static void main(String[] args) {
/**
* Json Map
*/
String str = "{\"name\":\"Tom\",\"age\":90}";
JSONObject jsonObject = JSONObject.fromObject(str);
Map<String, Object> map = (Map<String, Object>) JSONObject.toBean(jsonObject, Map.class);
System.out.println(map);
/**
* Json JavaBean
*/
str = "{\"id\":\"A001\",\"name\":\"Jack\"}";
jsonObject = JSONObject.fromObject(str);
System.out.println(jsonObject);
Person person = (Person) JSONObject.toBean(jsonObject, Person.class);
System.out.println(person);
}
}
実行結果は次のとおりです.
{age=90, name=Tom}
Person [id=A001, name=Jack]
Json形式の文字列をJavaBeanに変換するときは、JavaBeanにパラメトリック関数の有無に注意する必要があります.そうしないと、初期化方法のエラーが次のように表示されません.
Exception in thread "main" net.sf.json.JSONException: java.lang.NoSuchMethodException: cn.sunzn.json.Person.<init>()
at net.sf.json.JSONObject.toBean(JSONObject.java:288)
at net.sf.json.JSONObject.toBean(JSONObject.java:233)
at cn.sunzn.json.JsonLib.main(JsonLib.java:23)
Caused by: java.lang.NoSuchMethodException: cn.sunzn.json.Person.<init>()
at java.lang.Class.getConstructor0(Unknown Source)
at java.lang.Class.getDeclaredConstructor(Unknown Source)
at net.sf.json.util.NewBeanInstanceStrategy$DefaultNewBeanInstanceStrategy.newInstance(NewBeanInstanceStrategy.java:55)
at net.sf.json.JSONObject.toBean(JSONObject.java:282)
... 2 more