Androidベース-JSONデータ解析
7029 ワード
JSONとは
JSONはJavaScript Object Natationであり、XMLと同様に広く採用されているクライアントとサービス側の相互作用の解決策である軽量レベルのデータ交換フォーマットである.
JSONオブジェクト:JSONにおけるオブジェクト(Object)は"{"で始まり"}"で終わる.オブジェクトの各itemはkey-valueペアであり、「key:value」の形式で表現され、key-valueペアの間にカンマで区切る.例えば、{"name":"coolxing","age"=24,"male":true,"address":{"street":"huiLongGuan","city":"beijing","country":"china"}.JSONオブジェクトのkeyはstringタイプのみである、valueはstring、number、false、true、null、Objectオブジェクト、さらにはarray配列である、つまりネストされた場合がある.
JSON配列:JSON配列(array)は[]で始まり、[]で終わる.配列の各要素はstring、number、false、true、null、Objectオブジェクト、さらにはarray配列であり、配列間の要素はカンマで区切る.[coolxing],24,{"street":"huiLongGuan","city":"beijing","country":"china"}.
JSONデータの解析:JSONデータを解析するには、まず、解析対象がJSON ObjectであるかJSON arrayであるかを明確にし、その後、どの解析技術を採用するかを決定する必要がある.Androidプラットフォームには一般的に2つの解析技術があります:androidに内蔵org.jsonパッケージとgoogleのオープンソースgsonライブラリ.以下、これら2つの技術を用いてJSONオブジェクトとJSON配列を解析する.
1.android内蔵orgを採用する.json包解析JSON対象解析対象のJSONデータは、json="{"name":"coolxing",age=24,male":true,address":{"street":huiLongGuan",city":beijing",country":china"}}であり、エスケープ式の二重引用符として使用すると仮定する.まず2つのJavaBeanを定義します.
具体的な解析コードは次のとおりです.
LogCatの出力はPerson[name=coolxing,age=24,male=true,address=Address[street=huiLongGuan,city=beijing,country=china],JSONオブジェクトが正しく解析することを示す.
2.gsonライブラリを用いてJSONオブジェクトを解析する.解析付きJSONデータがjson="{name":"coolxing",age"=24,male":true,address":{street":huiLongGuan",city":beijing",country":china"}」であると仮定し、最初にhttp://code.google.com/p/google-gson/jarパッケージをダウンロードし、プロジェクトに追加します.具体的な解析コードは以下の通りです.
LogCatの出力はPerson[name=coolxing,age=24,male=true,address=Address[street=huiLongGuan,city=beijing,country=china],JSONオブジェクトが正しく解析されていることを示しているが,簡単ではないか.
3.android内蔵orgを採用する.json包解析JSON配列解析対象のJSONデータがjson=「{」name":」coolxing",」age"=24,」male":true,」address":{"street":"huiLongGuan","city"""""""beijing","country"":"china"},{"name":min",age=20,male":false,addresssdresssssssONデータがjson=""""\\\\""""""""""""""""\"""":{"street":"heiShiJiao","city":""daLian","country":"china"}",解析コードは以下の通りである.
LogCatの出力は[person[name=coolxing,age=24,male=true,address=Address[street=huiLongGuan,city=beijing,country=china],Person[name=min,age=20,male=false,address=Address[street=heiShiJiao,city=daLian,country=china]]であり、JSON配列が正しく解析されていることを示す.
4.gsonライブラリを用いてJSON配列を解析する.解析対象のJSONデータと同じで、具体的なコードは:
LogCatの出力は[person[name=coolxing,age=24,male=true,address=Address[street=huiLongGuan,city=beijing,country=china],Person[name=min,age=20,male=false,address=Address[street=heiShiJiao,city=daLian,country=china]]であり、JSON配列が正しく解析されていることを示す.
new TypeToken
JSONはJavaScript Object Natationであり、XMLと同様に広く採用されているクライアントとサービス側の相互作用の解決策である軽量レベルのデータ交換フォーマットである.
JSONオブジェクト:JSONにおけるオブジェクト(Object)は"{"で始まり"}"で終わる.オブジェクトの各itemはkey-valueペアであり、「key:value」の形式で表現され、key-valueペアの間にカンマで区切る.例えば、{"name":"coolxing","age"=24,"male":true,"address":{"street":"huiLongGuan","city":"beijing","country":"china"}.JSONオブジェクトのkeyはstringタイプのみである、valueはstring、number、false、true、null、Objectオブジェクト、さらにはarray配列である、つまりネストされた場合がある.
JSON配列:JSON配列(array)は[]で始まり、[]で終わる.配列の各要素はstring、number、false、true、null、Objectオブジェクト、さらにはarray配列であり、配列間の要素はカンマで区切る.[coolxing],24,{"street":"huiLongGuan","city":"beijing","country":"china"}.
JSONデータの解析:JSONデータを解析するには、まず、解析対象がJSON ObjectであるかJSON arrayであるかを明確にし、その後、どの解析技術を採用するかを決定する必要がある.Androidプラットフォームには一般的に2つの解析技術があります:androidに内蔵org.jsonパッケージとgoogleのオープンソースgsonライブラリ.以下、これら2つの技術を用いてJSONオブジェクトとJSON配列を解析する.
1.android内蔵orgを採用する.json包解析JSON対象解析対象のJSONデータは、json="{"name":"coolxing",age=24,male":true,address":{"street":huiLongGuan",city":beijing",country":china"}}であり、エスケープ式の二重引用符として使用すると仮定する.まず2つのJavaBeanを定義します.
public class Address {
private String street;
private String city;
private String country;
public Address() {
super();
}
public Address(String street, String city, String country) {
super();
this.street = street;
this.city = city;
this.country = country;
}
public String getStreet() {
return street;
}
public void setStreet(String street) {
this.street = street;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
@Override
public String toString() {
return "Address [street=" + street + ", city=" + city + ", country="
+ country + "]";
}
}
public class Person {
private String name;
private int age;
private boolean male;
private Address address;
public Person() {
super();
}
public Person(String name, int age, boolean male, Address address) {
super();
this.name = name;
this.age = age;
this.male = male;
this.address = address;
}
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 boolean isMale() {
return male;
}
public void setMale(boolean male) {
this.male = male;
}
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + ", male=" + male
+ ", address=" + address + "]";
}
}
具体的な解析コードは次のとおりです.
JSONObject jsonObject = new JSONObject(json);
String name = jsonObject.getString("name");
int age = jsonObject.getInt("age");
boolean male = jsonObject.getBoolean("male");
JSONObject addressJSON = jsonObject.getJSONObject("address");
String street = addressJSON.getString("street");
String city = addressJSON.getString("city");
String country = addressJSON.getString("country");
Address address = new Address(street, city, country);
Person person = new Person(name, age, male, address);
System.out.println(person);
LogCatの出力はPerson[name=coolxing,age=24,male=true,address=Address[street=huiLongGuan,city=beijing,country=china],JSONオブジェクトが正しく解析することを示す.
2.gsonライブラリを用いてJSONオブジェクトを解析する.解析付きJSONデータがjson="{name":"coolxing",age"=24,male":true,address":{street":huiLongGuan",city":beijing",country":china"}」であると仮定し、最初にhttp://code.google.com/p/google-gson/jarパッケージをダウンロードし、プロジェクトに追加します.具体的な解析コードは以下の通りです.
Gson gson = new Gson();
Person person = gson.fromJson(json, Person.class);
System.out.println(person);
LogCatの出力はPerson[name=coolxing,age=24,male=true,address=Address[street=huiLongGuan,city=beijing,country=china],JSONオブジェクトが正しく解析されていることを示しているが,簡単ではないか.
3.android内蔵orgを採用する.json包解析JSON配列解析対象のJSONデータがjson=「{」name":」coolxing",」age"=24,」male":true,」address":{"street":"huiLongGuan","city"""""""beijing","country"":"china"},{"name":min",age=20,male":false,addresssdresssssssONデータがjson=""""\\\\""""""""""""""""\"""":{"street":"heiShiJiao","city":""daLian","country":"china"}",解析コードは以下の通りである.
List<Person> persons = new ArrayList<Person>();
JSONArray jsonArray = new JSONArray(json);
for(int i = 0; i < jsonArray.length(); i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i);
String name = jsonObject.getString("name");
int age = jsonObject.getInt("age");
boolean male = jsonObject.getBoolean("male");
JSONObject addressJSON = jsonObject.getJSONObject("address");
String street = addressJSON.getString("street");
String city = addressJSON.getString("city");
String country = addressJSON.getString("country");
Address address = new Address(street, city, country);
Person person = new Person(name, age, male, address);
persons.add(person);
}
System.out.println(persons);
LogCatの出力は[person[name=coolxing,age=24,male=true,address=Address[street=huiLongGuan,city=beijing,country=china],Person[name=min,age=20,male=false,address=Address[street=heiShiJiao,city=daLian,country=china]]であり、JSON配列が正しく解析されていることを示す.
4.gsonライブラリを用いてJSON配列を解析する.解析対象のJSONデータと同じで、具体的なコードは:
Gson gson = new Gson();
Type listType = new TypeToken<List<Person>>(){}.getType();
List<Person> persons = gson.fromJson(json, listType);
LogCatの出力は[person[name=coolxing,age=24,male=true,address=Address[street=huiLongGuan,city=beijing,country=china],Person[name=min,age=20,male=false,address=Address[street=heiShiJiao,city=daLian,country=china]]であり、JSON配列が正しく解析されていることを示す.
new TypeToken
- >(){}.getType(); このコードは
TypeTokenの匿名サブクラスオブジェクトは、オブジェクトのgetType()メソッドを呼び出す.
org.jsonパッケージとgsonライブラリには他にも多くの有用なAPIがあり、必要に応じてドキュメントを表示することができます.例えばjavaオブジェクトやjava集合や配列からjsonデータを生成してサーバにアップロードする必要がある場合があります.もちろん、json文字列を自己構築することはできますが、面倒です.この时、その中のAPIを使って、便利にこの仕事を完成することができます.
変換元:http://coolxing.iteye.com/blog/1211403備考:異なる段階で基礎を見ると異なる収穫があり、Gsonの実現についてはよく知られていないが.