Android使用Gson解析JSON格式
2015-08-29 23:10
567 查看
1.json简介与范例
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,为Web应用开发提供了一种理想的数据交换格式。 类似于XML,都是通用数据交换格式,但是具有比XML更高的传输效率。JSON的规则比较简单:
1) 并列的数据之间用逗号(”,”)分隔。
2) 映射用冒号(”:”)表示。
3) 并列数据的集合(数组)用方括号(“[]”)表示。
4) 映射的集合(对象)用大括号(”{}”)表示。
以下写三个实例让便于大家理解:
json对象:
[code] // 简单的JSON对象 { "id":1000, "pageid":02, "name":"Jason", "age":23 }
JsonArray:
[code] ["吃饭","睡觉","打豆豆"]
Json复合结构:
[code]//使用对象和数组的组合构成复杂的数据结构。如下的代码使用对象结构定义了一个“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
[code]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
[code]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
[code]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视频录制命令screenrecord
- Android 中 Activity 启动模式(singleInstance、singleTask、singleTop、standard)
- Android toolbar阴影悬浮高亮效果
- 为什么Android的图片质量会比iPhone的差?
- 你是否为学习Android 而苦恼呢!
- gradle学习总结,偷窥android studio的底裤
- Android异步处理之AsyncTaskLoader简单使用
- Android中的BroadcastReceiver设置permission
- Android LoaderManager
- Android Studio plugins recommend
- android之xml需要的转义字符
- Android入门的优秀博文链接(持续更新中……)
- Android系统小知识点总结
- android 程序后台运行,定时刷新,像qq那样,即使程序不启动也照样运行
- Android 手势监听学习总结
- Android开发环境搭建及常见问题解决方法
- Android-Property_Animation介绍及基本实现(属性动画)
- android:如何从照片中获取拍摄地址信息
- Android视频播放器mediaplayer
- Android ImageView ScaleType 图解