Android使用Gson解析JSON格式
来源:互联网 发布:linux spi驱动移植 编辑:程序博客网 时间:2024/06/08 04:49
1.json简介与范例
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,为Web应用开发提供了一种理想的数据交换格式。 类似于XML,都是通用数据交换格式,但是具有比XML更高的传输效率。
JSON的规则比较简单:
1) 并列的数据之间用逗号(”,”)分隔。
2) 映射用冒号(”:”)表示。
3) 并列数据的集合(数组)用方括号(“[]”)表示。
4) 映射的集合(对象)用大括号(”{}”)表示。
以下写三个实例让便于大家理解:
json对象:
// 简单的JSON对象 { "id":1000, "pageid":02, "name":"Jason", "age":23 }
JsonArray:
["吃饭","睡觉","打豆豆"]
Json复合结构:
//使用对象和数组的组合构成复杂的数据结构。如下的代码使用对象结构定义了一个“client”对象,在“client”对象中包含了一个客户数组,而客户数组中的值又是JSON对象 { "client": [ {"name":"jason","age":23}, {"name":"watson","age":20} ] }
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",23,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数组进行解析一下,使程序更为丰满。
- Android使用Gson解析JSON格式
- android学习---使用GSON解析JSON格式数据
- Android使用gson解析json
- 使用库org.json 和 Gson 解析 JSON格式字符串
- Android中使用Gson解析JSON数据
- Android中使用Gson解析JSON数据
- Android中使用Gson解析JSON数据
- Android 中 使用 Gson解析json
- Android中使用Gson解析JSON数据
- Android中使用Gson解析JSON数据
- Android中使用Gson解析JSON数据
- Android下使用Gson解析JSON数据
- Android中使用gson解析JSON
- android使用Gson来解析json
- Android 使用Gson解析json用法
- Android中使用Gson解析JSON数据
- Android 使用Gson解析json案例详解
- Android 中 使用 Gson解析json
- Redis windows学习(一)——redis安装和基础使用
- 隐马尔科夫模型(Hidden Markov Models)
- linux shell (二)正则表达式
- 猜数字
- 解决hibernate向mysql插入中文乱码
- Android使用Gson解析JSON格式
- NOI2015 后记
- a point worth noting is that 的理解
- 整人
- [Android随笔]BroadcastReceiver广播机制
- Android APK调用mongoose
- WAMPServer集成环境安装
- ContentProvider的自定义及SMS和CONTACTS的内容提供者
- hdu5423 Rikka with Tree(DFS)