JSON即javascript Object Natation, 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,为WEB应用开发提供了一种理想的数据交换格式。 JS
JSON即javascript Object Natation, 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,为WEB应用开发提供了一种理想的数据交换格式。
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"}].
在上一篇博文《Android学习笔记44:JSON数据解析》中,我们使用基本的JSON api完成了在服务器端创建JSON数据,以及在Android客户端对JSON数据进行解析。
其实,要创建和解析JSON数据,也可以使用GSON来完成。GSON是Google提供的用来在Java对象和JSON数据之间进行映射的Java类库。使用GSON,可以很容易的将一串JSON数据转换为一个Java对象,或是将一个Java对象转换为相应的JSON数据。
1.GSON的两个重要方法
在GSON的API中,提供了两个重要的方法:toJson()和fromJson()方法。其中,toJson()方法用来实现将Java对象转换为相应的JSON数据,fromJson()方法则用来实现将JSON数据转换为相应的Java对象。
1.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数据。
1.2 fromJson()方法
fromJson()方法用于将JSON数据转换为相应的Java对象,主要有以下几种形式:
(1)<T> T fromJson(JsonElement json, Class<T> classOfT);
(2)<T> T fromJson(JsonElement json, Type typeOfT);
(3)<T> T fromJson(JsonReader reader, Type typeOfT);
(4)<T> T fromJson(Reader reader, Class<T> classOfT);
(5)<T> T fromJson(Reader reader, Type typeOfT);
(6)<T> T fromJson(String json, Class<T> classOfT);
(7)<T> T fromJson(String json, Type typeOfT);
以上的方法用于将不同形式的JSON数据解析成Java对象。
2.在服务器端生成JSON数据
要使用GSON技术在服务器端生成JSON数据,首先需要完成以下两个准备工作。
(1)使用MyEclipse创建了一个Web Project,这里我将该工程命名为了“GsonDemoProject”,用来模拟服务器端的Web服务。
(2)往该工程中导入GSON的API数据包gson-2.2.1.jar。
然后,我们便可以在该工程中创建一个JsonTools工具类,并实现静态方法createJsonString(),在该方法中通过使用GSON技术来生成JSON数据。该方法的具体实现如下。
public class JsonTools {
public static String createJsonString(Object value) {
Gson gson = new Gson();
String string = gson.toJson(value);
return string;
}
}
可以看到,这个方法的具体实现非常简单,首先创建一个Gson对象,然后通过调用Gson对象的toJson()方法,将传进来的value(任意的Java对象)转换成JSON字符串即可。
通过使用该方法,我们可以很方便的将任意Java对象传递进来,并将其转化成JSON数据。和上一篇博文中一样,我们可以在JsonService类中,实现一个简单的获取Person对象列表的方法,具体如下:
public List<Person> getListPerson() {
List<Person> list = new ArrayList<Person>();
Person person = new Person(, "jack", );
Person person = new Person(, "rose", );
Person person = new Person(, "bob", );
list.add(person);
list.add(person);
list.add(person);
return list;
}
在该方法中,我们向List列表中加入了3个Person对象,每个Person对象具有id(int)、name(String)和age(int)三个属性。
最后,我们还需要创建一个继承自httpservlet的JsonAction类,并实现其中的doPost()方法,用来响应客户端对服务器的请求。具体如下:
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-");
request.setCharacterEncoding("utf-");
response.setCharacterEncoding("utf-");
PrintWriter out = response.getWriter();
List<Person> listPerson = jsonService.getListPerson();
String str = null;
String action_flag = request.getParameter("action_flag");
if(action_flag.equals("persons") {
str = JsonTools.createJsonString(listPerson);
}
out.println(str);
out.flush();
out.close();
}
在该方法中,我们通过调用JsonService类中的getListPerson()方法获得了Person对象列表listPerson,并将其传入JsonTools.createJsonString()方法中,生成了Person对象列表的JSON数据。将该工程发布到Tomcat上,使用浏览器访问该Web工程,可以看到如图1所示的界面,Person对象列表被成功的转化成了JSON数据。
图1 生成的JSON数据
3.在客户端解析JSON数据
在Android工程中,我们可以通过HttpURLConnection接口访问图1所示的URL来获得服务器上的JSON数据。
得到JSON数据之后,便可以通过使用前面提到的fromJson()方法,将图1 所示的JSON数据还原成对应的Person对象列表了。当然了,因为这里使用到了GSON,同样需要向Android工程中导入gson-2.2.1.jar包。具体的实现方法如下。
public static List<Person> getListPerson(String jsonString) {
List<Person> list = new ArrayList<Person>();
Gson gson = new Gson();
list = gson.fromJson(jsonString, new TypeToken<List<Person>>(){}.getType());
return list;
}
可以看到,使用GSON解析JSON数据的代码实现也非常简单。其中,TypeToken是GSON提供的数据类型转换器,支持多种数据集合类型转换,其反射机制可以实现将解析出来的Java对象映射到对应的数据集合中。
在本实例中,同样点击Button按钮向服务器发送获取JSON数据的请求,从服务器获得JSON数据后,使用以上的代码完成对JSON数据的解析,最后将解析得到的Person对象依次显示在TextView控件中。程序运行的结果如图2所示。
图2 运行结果
以上内容是小编给大家分享的Android学习笔记45之gson解析json的全部叙述,希望大家喜欢。
您可能感兴趣的文章:Android编程简单解析JSON格式数据的方法示例Android使用OKHTTP解析JSON数据的实例代码android JSON解析数据 android解析天气预报Android 中对JSON数据解析实例代码Android解析json数据示例代码(三种方式)Android编程实现根据经纬度查询地址并对获取的json数据进行解析的方法Android之解析JSON数据示例(android原生态,FastJson,Gson)Android json数据解析详解及实例代码Android系列---JSON数据解析的实例Android利用Gson解析嵌套多层的Json的简单方法Android M(6.x)使用OkHttp包解析和发送JSON请求的教程Android解析JSON数据的方法分析Android json解析及简单例子android解析JSON数据Android中gson、jsonobject解析JSON的方法详解Android解析json数组对象的方法及Apply和数组的三个技巧Android随手笔记44之JSON数据解析android原生JSON解析实例
--结束END--
本文标题: Android学习笔记45之gson解析json
本文链接: https://www.lsjlt.com/news/26092.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-01-21
2023-10-28
2023-10-28
2023-10-27
2023-10-27
2023-10-27
2023-10-27
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0