1.json簡介與範例
JSON(JavaScript Object Notation)是一種輕量級的資料交換格式,采用完全獨立于語言的文本格式,為Web應用開發提供了一種理想的資料交換格式。 類似于XML,都是通用資料交換格式,但是具有比XML更高的傳輸效率。
JSON的規則比較簡單:
1) 并列的資料之間用逗号(”,”)分隔。
2) 映射用冒号(”:”)表示。
3) 并列資料的集合(數組)用方括号(“[]”)表示。
4) 映射的集合(對象)用大括号(”{}”)表示。
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyMycjMxETMzITOygDM1EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
以下寫三個執行個體讓便于大家了解:
json對象:
// 簡單的JSON對象
{
"id":,
"pageid":,
"name":"Jason",
"age":
}
JsonArray:
["吃飯","睡覺","打豆豆"]
Json複合結構:
//使用對象和數組的組合構成複雜的資料結構。如下的代碼使用對象結構定義了一個“client”對象,在“client”對象中包含了一個客戶數組,而客戶數組中的值又是JSON對象
{
"client":
[
{"name":"jason","age":},
{"name":"watson","age":}
]
}
2.Gson的使用
Gson提供了兩個重要的方法:toJson()和fromJson()方法。
其中,toJson()方法用來實作将Java對象轉換為相應的JSON資料,fromJson()方法則用來實作将JSON資料轉換為相應的Java對象。
這兩個方法最重要的地方就是構造好實體類和json串呼應。
2.1 toJson()方法
toJson()方法用于将Java對象轉換為相應的JSON資料,主要有以下幾種形式:
(1)String toJson(JsonElement jsonElement);
(2)String toJson(Object src);
(3)String toJson(Object src, Type typeOfSrc);
其中,方法(1)用于将JsonElement對象(可以是JsonObject、JsonArray等)轉換成JSON資料;
方法(2)用于将指定的Object對象序列化成相應的JSON資料;
方法(3)用于将指定的Object對象(可以包括泛型類型)序列化成相應的JSON資料。
2.2 fromJson()方法
fromJson()方法用于将JSON資料轉換為相應的Java對象,主要有以下幾種形式:
(1) T fromJson(JsonElement json, Class classOfT);
(2) T fromJson(JsonElement json, Type typeOfT);
(3) T fromJson(JsonReader reader, Type typeOfT);
(4) T fromJson(Reader reader, Class classOfT);
(5) T fromJson(Reader reader, Type typeOfT);
(6) T fromJson(String json, Class classOfT);
(7) T fromJson(String json, Type typeOfT);
以上的方法用于将不同形式的JSON資料解析成Java對象。
2.3 實際測試代碼
接下來的代碼就是對Gson的這兩個方法的測試和應用:
老規矩,先上圖檔:
兩個按鈕,作為兩個方法的轉換測試。
生成兩個bean對象,Person中嵌套有Address
Address.java
package com.usegson.Bean;
/**
* 人詳細中的位址子產品獨立出來
* 為觀察複合結構的json串格式
* 主要是一些geter setter 方法
* Created by Administrator on 2015/8/30.
*/
public class Address {
private String street;
private String city;
private String country;
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 getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String toString() {
return "Address [street=" + street + ", city=" + city + ", country="+ country + "]";
}
}
Person.java
package com.usegson.Bean;
/**
* 人物資訊
* 主要是一些geter setter 方法
* 嵌套了位址Address
* Created by Administrator on 2015/8/30.
*/
public class Person {
private String name;
private int age;
private boolean male;
private Address address;
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 Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
public boolean isMale() {
return male;
}
public void setMale(boolean male) {
this.male = male;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String toString() {
return "Person [name=" + name + ", age=" + age + ", male=" + male
+ ", address=" + address + "]";
}
}
MainActivity
package com.usegson;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import com.google.gson.Gson;
import com.usegson.Bean.Address;
import com.usegson.Bean.Person;
/**
* 簡單地示範gson的fromJson和toJson的用法
*/
public class MainActivity extends AppCompatActivity {
private Person person; // 人物類
private Button btntojson; // tojson按鈕
private Button btnfromjson; // frojson按鈕
private TextView tv; //文本
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//初始化相關控件
init();
// 設定為final,好作為引用
final Gson gson=new Gson();
// 友善起見,将init中執行個體化的pesrson先轉化為json串格式存作字元串
final String s1=gson.toJson(person);
// tojson的監聽
btntojson.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 轉化已經在前面實作了,實際中應該是接收伺服器的字元串
tv.setText(s1);
}
});
// fromjson的監聽
btnfromjson.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// s1已經是JSON格式的了,模拟伺服器傳過來的json資料
// 将json格式按昭Person中的定義形式輸出
tv.setText(gson.fromJson(s1,Person.class).toString());
}
});
}
private void init() {
btntojson= (Button) findViewById(R.id.button1);
btnfromjson= (Button) findViewById(R.id.button2);
tv= (TextView) findViewById(R.id.tv);
// 直接傳入參數,構造person執行個體
person=new Person("Jason",,true,new Address("CH","CD","CN"));
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
主界面就是兩個button,一個textview,設定監聽,點選兩個按鈕實作textview的顯示文本轉化。明天我會貼上圖。
這隻是最簡單的實作。後面我再對json數組進行解析一下,使程式更為豐滿。