GSON:
Gson是google開發(fā)的json格式解析包,其特點(diǎn)是在解析json之前必須知道所傳輸?shù)膉son數(shù)據(jù)格式,并定義一系列層次結(jié)構(gòu)與json層次結(jié)構(gòu)相同的類。換句話說,如果傳輸?shù)膉son結(jié)構(gòu)為:
- {
- "name":"relin",
- "sex":"male",
- "age":26
- }
那么,就必須預(yù)先定義一個(gè)成員變量名字與json中屬性名字完全相同的類:
- class Person {
- public String name;
- public String sex;
- public int age;
- }
Gson解析json有三個(gè)特點(diǎn):
- 如果預(yù)先定義的類中不包含json中的某個(gè)屬性,則該屬性就不會(huì)被解析出來,但是其他成員仍然能正常解析
- 命名必須完全相同,否則不會(huì)被正常解析
- 類的成員變量可以是public,也可以是private
讓我們來看兩個(gè)簡(jiǎn)單的解析與反解析過程:
1. 定義類:
- package com.relin.gson.data;
-
- public class Person {
- private String name;
- private int age;
- private int sex;
- /** * @return the name */
- public String getName() {
- return name+"*****";
- }
-
- /** * @param name the name to set */
- public void setName(String name) {
- this.name = name;
- }
-
- /** * @return the age */
- public int getAge() {
- return age;
- }
-
- /** * @param age the age to set */
- public void setAge(int age) {
- this.age = age;
- }
-
- @Override
- public String toString() {
- return name + ":" + age;
- }
- }
2. String to json:
- private static boolean StringToJson(){
- try{
- String str = "{\"name\":\"name0\",\"age\":0}";
- Gson gson = new Gson();
- Person person= gson.fromJson(str, Person.class);
- System.out.println(person);
- } catch (Exception e){
- return false;
- }
- return true;
- }
3. Json to String:
- private static boolean JsonToString(){
- try{
- Gson gson = new Gson();
- ArrayList<Person> persons = new ArrayList<Person>();
- for (int i = 0; i < 10; i++) {
- Person p = new Person();
- p.setName("name" + i);
- p.setAge(i * 5);
- persons.add(p);
- }
- String str = gson.toJson(persons);
- System.out.println(str);
- } catch (Exception e){
- return false;
- }
- return true;
- }
4. 調(diào)用可以如下所示:
- package com.relin.gson;
-
- import java.util.ArrayList;
-
- import com.google.gson.Gson;
- import com.relin.gson.data.Person;
- import com.relin.gson.data.UrlResponse;
-
- public class Example {
- private static boolean JsonToString(){
- try{
- Gson gson = new Gson();
- ArrayList<Person> persons = new ArrayList<Person>();
- for (int i = 0; i < 10; i++) {
- Person p = new Person();
- p.setName("name" + i);
- p.setAge(i * 5);
- persons.add(p);
- }
- String str = gson.toJson(persons);
- System.out.println(str);
- } catch (Exception e){
- return false;
- }
- return true;
- }
-
- <pre name="code" class="java"> private static boolean StringToJson(){
- try{
- String str = "{\"name\":\"name0\",\"age\":0}";
- Gson gson = new Gson();
- Person person= gson.fromJson(str, Person.class);
- System.out.println(person);
- } catch (Exception e){
- return false;
- }
- return true;
- }</pre>public static void main(String agrs[]){StringToJson();<br>
- <pre name="code" class="java"> JsonToString()</pre> }}<p></p>
- <pre></pre>
- <br>
- <p></p>
- <h2><a name="t1"></a>JSONObject<br>
- </h2>
- <p>另一種用與解析json的java api是來自org.json。用其相對(duì)比較直觀,其中包含有個(gè)主要的類:</p>
- <ul>
- <li>JSONObject相當(dāng)與json中的字典類型</li></ul>
- <ul>
- <li>JSONArray相當(dāng)與json中的數(shù)組類型<br>
- </li></ul>
- <p>基本用法如下:</p><pre name="code" class="java"> //將String字符串轉(zhuǎn)換為json對(duì)象
- JSONObject jsonObject = new JSONObject(strbody);
- //提取int型的屬性,其屬性名為From,其他boolean等類型也類似
- int from = jsonObject.getInt("From");
- //提取json數(shù)組
- JSONArray toData= jsonObject.getJSONArray("ToData");</pre><br>
- <br>
- <p></p>
- <br>
-
|