课题_Android学习笔记45:JSON数据解析

合集下载

JSON数据的详细解析方法

JSON数据的详细解析方法

JSON数据的详细解析方法JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,常用于Web应用程序之间的数据传输。

它由键值对组成,可以包含对象、数组、数字、字符串、布尔值和null。

下面将详细解析JSON数据的方法。

1.JSON基本结构:2.解析JSON数据的方法:(1)使用各种编程语言的内置函数:大多数编程语言都提供了内置函数来解析JSON数据。

例如,在JavaScript中,可以使用JSON.parse(方法将JSON字符串转换为JavaScript对象。

在Python中,可以使用json模块中的json.loads(函数将JSON字符串转换为Python字典或列表。

(2)手动解析:如果没有内置函数可用或想要更深入了解JSON数据的结构,可以手动解析JSON数据。

- 首先,将JSON字符串转换为支持键值对结构的数据类型,如字典(Python)或对象(JavaScript)。

-然后,通过键名或属性访问特定的值,或者通过遍历数组访问元素。

3.对象的解析:JSON对象由键值对组成,可以通过键名访问对应的值。

例如,假设有以下JSON对象:"age": 30,"city": "New York"可以通过以下方式解析该对象:(1)使用内置函数:通过JSON.parse(方法(JavaScript)或json.loads(函数(Python)将JSON字符串转换为对象,然后通过对象的属性访问值。

(2)手动解析:将JSON字符串转换为支持键值对的数据类型,如字典(Python)或对象(JavaScript),然后通过键名访问值。

4.数组的解析:例如,假设有以下JSON数组:[ "apple", "banana", "orange" ]可以通过以下方式解析该数组:(1)使用内置函数:通过JSON.parse(方法(JavaScript)或json.loads(函数(Python)将JSON字符串转换为数组,然后通过索引访问特定元素。

Android 中的JSON 数据处理

Android 中的JSON 数据处理

Android 中的JSON 数据处理Android 中的 JSON 数据处理在 Android 开发中,我们经常需要与服务器进行数据交互,而大多数情况下服务器返回的数据格式都是使用 JSON(JavaScript Object Notation)来表示。

因此,了解和掌握如何在 Android 中处理 JSON 数据是非常重要的。

本文将介绍 Android 中的 JSON 数据处理,包括解析 JSON 数据、构建 JSON 数据、以及处理 JSON 中的数组和对象等。

1. 解析 JSON 数据在 Android 中,可以使用 JSONObject 和 JSONArray 来解析 JSON 数据。

JSONObject 是一个键值对的集合,而 JSONArray 是一个有序的值的集合。

以下是一个解析 JSON 数据的示例代码:```javatry {String jsonString = "{ \"name\":\"John\", \"age\":30, \"city\":\"New York\" }";JSONObject jsonObject = new JSONObject(jsonString);String name = jsonObject.getString("name");int age = jsonObject.getInt("age");String city = jsonObject.getString("city");Log.d("JSON", "Name: " + name);Log.d("JSON", "Age: " + age);Log.d("JSON", "City: " + city);} catch (JSONException e) {e.printStackTrace();}```2. 构建 JSON 数据在 Android 中,可以使用 JSONObject 和 JSONArray 来构建 JSON 数据。

AndroidJSON数据解析(数据传输)

AndroidJSON数据解析(数据传输)

AndroidJSON数据解析(数据传输)上篇随笔详细介绍了三种解析服务器端传过来的xml数据格式,⽽对于服务器端来说,返回给客户端的数据格式⼀般分为html、xml和json这三种格式,那么本篇随笔将讲解⼀下json这个知识点,包括如何通过json-lib和gson这两个json解析库来对解析我们的json数据,以及如何在我们的Android客户端解析来⾃服务器端的json数据,并更新到UI当中。

⼀、什么是jsonjson(Javascript Object Notation)是⼀种轻量级的数据交换格式,相⽐于xml这种数据交换格式来说,因为解析xml⽐较的复杂,⽽且需要编写⼤段的代码,所以客户端和服务器的数据交换格式往往通过json来进⾏交换。

尤其是对于web开发来说,json数据格式在客户端直接可以通过javascript来进⾏解析。

json⼀共有两种数据结构,⼀种是以 (key/value)对形式存在的⽆序的jsonObject对象,⼀个对象以“{”(左花括号)开始,“}”(右花括号)结束。

每个“名称”后跟⼀个“:”(冒号);“‘名称/值’ 对”之间使⽤“,”(逗号)分隔。

例如:{"name": "xiaoluo"},这就是⼀个最简单的json对象,对于这种数据格式,key值必须要是string类型,⽽对于value,则可以是string、number、object、array等数据类型:另⼀种数据格式就是有序的value的集合,这种形式被称为是jsonArray,数组是值(value)的有序集合。

⼀个数组以“[”(左中括号)开始,“]”(右中括号)结束。

值之间使⽤“,”(逗号)分隔。

⼆、解析json数据格式这⾥将使⽤两种json的解析库来对我们的json数据格式进⾏解析以及⽣成我们的json数据格式。

使⽤json-lib来进⾏解析,我们需要引⼊第三⽅的包,因为json-lib分为了两个版本,⼀个版本是针对于jdk1.3的,⼀个版本是针对于jdk1.5的,这⾥我们下载jdk1.5的这个json-lib包,其中还需要引⼊其他的⼏个jar包:下载好这⼏个jar包后,加⼊到classpath中即可。

Android学习之解析Json

Android学习之解析Json

在线学习好工作/Android学习之解析Json解析Json有了请求,自然会有响应,那我们该如何解析服务端响应返回给我们的Json 数据呢?了解什么是JsonJSON(JavaScript object notation)是一种轻量级的数据交换格式。

它是基于ECMAscript的一个子集。

JSON采用完全独立于语言的文本格式,但是也是用的类似于c语言家族的习惯(包括c、c++、c#、java、javascript、perl、Python等)。

这些特性是JSON成为理想的数据交换语言。

易于人阅读和编写,同时也易于机器解析和生成(一般用于提升网络传输速率)。

JSON的语法规则JSON是JavaScript对象表示语法的子集。

1) 数据在键值对中。

2) 数据由逗号分隔3) 花括号保存对象4) 方括号保存数组JSON的值可以是?1) 数字(整数或浮点数)2) 字符串(在双引号中)3) 逻辑值(true或false)4) 数组(在方括号中)5) 对象(在花括号中)6) null代码演示,如何解析JSON格式数据?1) 使用之前演示HttpGet和HttpPost时,已经写好的可以得到从服务器返回的JSON格式的字符串的代码。

调用parseData()方法,传递参数result。

如下图:得到的需要解析的JSON数据如下图所示:2) 根据分析JSON数据的格式,这里可以看出JSON格式解析到最里层,得到的是一组一组的对象,对象里面包含name和sex属性。

所以,在这里构造出一个对应该对象的实体类,并提供对外访问的getter和setter方法。

3) 这里我们重写tostring()方法,通过调用此方法,可以打印出该对象的name 值和sex值,这样做是为了待会儿打印出对象的属性值,展示效果。

4) 由于得到的最里层的member对象的集合,这里采用list包装。

由于这里提供的这段JSON格式的数据最外层是对象包装,所以可以采用sun 公司原生提供的JSONObject类,传入对象格式的JSON数据构造一个JOSNObject 的对象。

json解析流程

json解析流程

JSON(JavaScript Object Notation)是一种常用于数据交换的轻量级数据格式。

解析JSON数据通常涉及以下几个步骤:1. 读取数据:首先,你需要从数据源(如文件、网络请求等)读取JSON 数据。

这可以是一个包含JSON数据的文本文件、HTTP响应等。

2. 解析数据:解析是将JSON文本数据转换为编程语言内部的数据结构的过程。

在大多数编程语言中,都有内置的JSON解析库或模块,可以用来解析JSON数据。

3. 解析器:JSON解析库或模块会将JSON文本解析为对象、字典、数组或其他适合的数据结构,这样你就可以在编程语言中操作这些数据了。

4. 访问数据:解析后的JSON数据被表示为编程语言的数据结构,你可以通过对象属性、字典键值、数组索引等方式来访问和操作数据。

5. 错误处理:在解析JSON数据时,可能会出现错误,比如JSON格式不正确、缺失了某些键值等。

解析库通常提供了错误处理机制,你可以捕获并处理这些错误,以便在解析出错时进行适当的操作。

6. 释放资源:在解析完毕后,确保释放已分配的资源,如关闭文件句柄、释放内存等。

以下是一个简单的伪代码示例,展示了JSON解析的基本流程(以Python 为例):import json# 读取JSON数据json_data = '{"name": "John", "age": 30, "city": "New York"}'# 解析JSON数据parsed_data = json.loads(json_data)# 访问数据name = parsed_data["name"]age = parsed_data["age"]city = parsed_data["city"]# 打印数据print("Name:", name)print("Age:", age)print("City:", city)```在实际开发中,根据所使用的编程语言和JSON解析库的不同,具体的解析流程可能会有细微的差异。

Android之JSON格式数据解析

Android之JSON格式数据解析

JSON:JavaScript 对象表示法(JavaScript Object Notation)。

独立于语言和平台,比 XML 更小、更快,更易解析。

如今JSON数据已经成为了互联网中大多数数据的传递方式,所以必须要熟练掌握。

Android平台自带了JSON解析的相关API,可以将文件、输入流中的数据转化为JSON对象,然后从对象中获取JSON保存的数据内容。

Android的JSON解析部分都在包org.json下,主要有以下几个类:JSONObject:可以看作是一个json对象,这是系统中有关JSON定义的基本单元,其包含一对儿(Key/Value)数值。

它对外部(External:应用toString()方法输出的数值)调用的响应体现为一个标准的字符串(例如:{"JSON": "Hello, World"},最外被大括号包裹,其中的Key和Value被冒号":"分隔)。

其对于内部(Internal)行为的操作格式略微,例如:初始化一个JSONObject实例,引用内部的put()方法添加数值:new JSONObject().put("JSON", "Hello, World!"),在Key和Value之间是以逗号","分隔。

Value的类型包括:Boolean、JSONArray、JSONObject、Number、String或者默认值JSONObject.NULL object。

JSONStringer:json文本构建类,根据官方的解释,这个类可以帮助快速和便捷的创建JSON text。

其最大的优点在于可以减少由于格式的错误导致程序异常,引用这个类可以自动严格按照JSON语法规则(syntax rules)创建JSON text。

每个JSONStringer实体只能对应创建一个JSON text。

浅谈Android项目----JSON解析(4种解析技术详解)

浅谈Android项目----JSON解析(4种解析技术详解)

浅谈Android项⽬----JSON解析(4种解析技术详解)json简介1.概念:json全称是javaScript object Notation,是⼀种并轻量级的数据交换格式。

2.特点:1.本质就是具有特定格式的字符串2.json完全独⽴于编程语⾔3.json⽐xml数据传输的有效性要⾼出很多Android系统也原⽣的提供了JSON解析的API,但是它的速度很慢,⽽且没有提供简介⽅便的接⼝来提⾼开发者的效率和降低出错的可能。

因此,通常情况下,我们都会选择其他优秀的JSON解析实现,⽤以替代系统的API,⽬前JSON解析的开源实现主要包括⼀下三种:GsonJackJsonFastJsonJSON对象:JSON数组:先简单的来介绍⼀下原⽣的JSON解析API:他的特点是很⿇烦,对于复杂的json数据解析很容易出错使⽤:解析JSON对象的API:JsonObjectJSONObject(String json);将Json字符串解析成Json对象;getXxx(String name) ;根据name在json对象中得到相应的value值;private String ObjectanalysisTest(String string) {try {JSONObject jsonObject = new JSONObject(string);String name = jsonObject.getString("name");int age = jsonObject.optInt("age");String sex = jsonObject.optString("sex");return "name:" + name + " age:" + age + " sex:" + sex;} catch (JSONException e) {e.printStackTrace();}return null;}解析Json数组的API:JSONArrayJSONArray(String json);将json字符串解析成json数组;int length();得到json数组中元素的个数;getXxx(String name) ;根据name得到json数组中对应的元素数据。

Android 中的json解析

Android 中的json解析

Android 中的json解析一.Json的两种结构对象:对象在js中表示为“{}”括起来的内容,数据结构为{key:value,key:value,...}的键值对的结构,在面向对象的语言中,key为对象的属性,value为对应的属性值,所以很容易理解,取值方法为对象.key数组:数组在js中是中括号“[]”括起来的内容,数据结构为["java","javascript","vb",...]二.使用org.json包JSONObject和JSONArray进行解析1. json1: <code>{"name":"sam","age":18,"weight":60}一个json对象2.json2:[12,13,15] //json2 一个数字数组3.json3[{"name":"sam","age":18},{"name":"leo","age":19},{"name":"sky", "age":20}第一个json对象json1的解析JSONObject jsonObj = new JSONObject(json1);String name = jsonObj.optString("name");int age = jsonObj.optInt("age");int weight = jsonObj.optInt("weight");第二个json对象json2的解析jsonArray = new JSONArray(json2);for(int= 0; i < jsonArray.length();i++) {int age = jsonArray.optInt(i);}第三个json对象json3的解析JSONArray jsonArray = new JSONArray(json3);for(int= 0; i < jsonArray.length();i++) {JSONObject jsonObject = jsonArray.optJSONObject(i);String name = jsonObject.optString("name");int age = jsonObject.optInt("age");另外还有:Object opt(String name)boolean optBoolean(String name)double optDouble(String name)JSONArray optJSONArray(String name)JSONObject optJSONObject(String name)这些方法在解析时,如果对应字段不存在会返回空值或者0,不会报错。

Android中使用Gson解析JSON数据的两种方法

Android中使用Gson解析JSON数据的两种方法

Android中使⽤Gson解析JSON数据的两种⽅法Json是⼀种类似于XML的通⽤数据交换格式,具有⽐XML更⾼的传输效率.从结构上看,所有的数据(data)最终都可以分解成三种类型:第⼀种类型是标量(scalar),也就是⼀个单独的字符串(string)或数字(numbers),⽐如"北京"这个单独的词。

第⼆种类型是序列(sequence),也就是若⼲个相关的数据按照⼀定顺序并列在⼀起,⼜叫做数组(array)或列表(List),⽐如"北京,上海"。

第三种类型是映射(mapping),也就是⼀个名/值对(Name/value),即数据有⼀个名称,还有⼀个与之相对应的值,这⼜称作散列(hash)或字典(dictionary),⽐如"⾸都:北京"。

Json的规格⾮常简单,只⽤⼀个页⾯⼏百个字就能说清楚,⽽且Douglas Crockford声称这个规格永远不必升级,因为该规定的都规定了。

1)并列的数据之间⽤逗号(",")分隔。

2)映射⽤冒号(":")表⽰。

3)并列数据的集合(数组)⽤⽅括号("[]")表⽰。

4)映射的集合(对象)⽤⼤括号("{}")表⽰。

在Android中可以使⽤Gson解析JSON数据⾸先,从 /p/google-gson/downloads/list下载GsonAPI:google-gson-1.7.1-release.zip把gson-1.7.jar copy到libs(项⽬根⽬录新建⼀个libs⽂件夹)中。

可以使⽤以下两种⽅法解析JSON数据:通过获取JsonReader对象解析JSON数据:复制代码代码如下:String jsonData = "[{\"username\":\"arthinking\",\"userId\":001},{\"username\":\"Jason\",\"userId\":002}]";try{JsonReader reader = new JsonReader(new StringReader(jsonData));reader.beginArray();while(reader.hasNext()){reader.beginObject();while(reader.hasNext()){String tagName = reader.nextName();if(tagName.equals("username")){System.out.println(reader.nextString());}else if(tagName.equals("userId")){System.out.println(reader.nextString());}}reader.endObject();}reader.endArray();}catch(Exception e){e.printStackTrace();}通过把JSON数据映射成⼀个对象,使⽤Gson对象的fromJson()⽅法获取⼀个对象数组进⾏操作:创建JSON数据对应的⼀个POJO对象User.java:复制代码代码如下:public class User {private String username ;private int userId ;public String getUsername() {return username;}public void setUsername(String username) {ername = username;}public int getUserId() {return userId;}public void setUserId(int userId) {erId = userId;}}使⽤Gson对象获取User对象数据进⾏相应的操作:复制代码代码如下:Type listType = new TypeToken<LinkedList<User>>(){}.getType();Gson gson = new Gson();LinkedList<User> users = gson.fromJson(jsonData, listType);for (Iterator iterator = users.iterator(); iterator.hasNext();) {User user = (User) iterator.next();System.out.println(user.getUsername());System.out.println(user.getUserId());}如果要处理的JSON字符串只包含⼀个JSON对象,则可以直接使⽤fromJson获取⼀个User对象:复制代码代码如下:String jsonData = "{\"username\":\"arthinking\",\"userId\":001}";Gson gson = new Gson();User user = gson.fromJson(jsonData, User.class);System.out.println(user.getUsername());System.out.println(user.getUserId());。

解析json的3种方法

解析json的3种方法

解析json的3种方法JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它易于人们阅读和编写,同时也易于机器解析和生成。

在日常的软件开发中,我们经常会遇到需要解析JSON数据的情况。

本文将介绍解析JSON的三种方法,希望能够帮助大家更好地理解和应用JSON数据。

第一种方法是使用内置的JSON对象进行解析。

在JavaScript 中,可以使用JSON对象的parse方法将JSON字符串转换为JavaScript对象,或者使用stringify方法将JavaScript对象转换为JSON字符串。

这种方法简单易用,适用于简单的JSON数据解析和生成。

第二种方法是使用第三方库进行解析。

除了内置的JSON对象,还有许多第三方库可以用来解析JSON数据,例如在Node.js中常用的库有`jsonparse`、`json5`等。

这些库通常提供了更多的功能和更灵活的选项,可以满足各种复杂的JSON数据解析需求。

第三种方法是使用JSON Schema进行解析。

JSON Schema是一种用于描述JSON数据结构的语言,可以用来验证和解析JSON数据。

通过定义JSON Schema,可以规定JSON数据的结构和约束条件,然后使用相应的工具来解析和验证JSON数据。

这种方法适用于需要对JSON数据进行严格验证和规范的场景。

总的来说,解析JSON数据有多种方法可供选择,每种方法都有其适用的场景和特点。

在实际应用中,我们可以根据具体的需求和情况选择合适的方法来解析JSON数据,以便更好地处理和利用JSON数据。

希望本文介绍的三种方法能够对大家有所帮助,让大家在日常的软件开发中更加轻松地处理JSON数据。

json格式解析

json格式解析

json格式解析正文:JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它易于阅读和编写,并且易于机器解析和生成。

JSON格式通常用于将数据从服务器发送到客户端,或者将数据从一个应用程序传递到另一个应用程序。

JSON由键值对组成,其中键是一个字符串,值可以是字符串、数字、布尔值、数组、对象或者null。

以下是一个简单的JSON示例:```json{'name': 'John','age': 30,'isStudent': true,'hobbies': ['reading', 'hiking', 'coding'],'address': {'street': '123 Main St','city': 'New York','country': 'USA'},'isNull': null}```要解析JSON,我们可以使用不同编程语言提供的JSON解析库或函数。

这些库或函数可以将JSON字符串转换为相应的数据结构,以便我们可以轻松地访问和操作数据。

在大多数编程语言中,我们可以使用以下步骤解析JSON格式的数据:1. 将JSON字符串传递给JSON解析函数。

2. 解析函数将JSON字符串解析为相应的数据结构,如字典、数组、对象等。

3. 可以通过访问数据结构的键或索引来获取特定的值。

例如,如果我们使用Python编程语言,可以使用`json`库来解析JSON数据。

以下是一个使用Python解析上述JSON示例的示例代码:```pythonimport json# JSON字符串json_str = '''{'name': 'John','age': 30,'isStudent': true,'hobbies': ['reading', 'hiking', 'coding'],'address': {'street': '123 Main St','city': 'New York','country': 'USA'},'isNull': null}'''# 解析JSONdata = json.loads(json_str)# 访问特定的值print('Na', data['name'])print('Age:', data['age'])print('Is Student:', data['isStudent'])print('Hobbies:', data['hobbies'])print('Street:', data['address']['street']) print('City:', data['address']['city'])print('Country:', data['address']['country']) print('IsNull:', data['isNull'])```以上代码将输出以下结果:```Na JohnAge: 30Is Student: TrueHobbies: ['reading', 'hiking', 'coding']Street: 123 Main StCity: New YorkCountry: USAIsNull: None```通过解析JSON格式的数据,我们可以轻松地访问和处理其中的信息,以满足我们的特定需求。

android中常用的json,xml,gson解析的原理

android中常用的json,xml,gson解析的原理

android中常用的json,xml,gson解析的原理在Android应用程序开发中,我们常常需要处理各种数据格式,其中JSON和XML是最常用的两种。

另外,随着数据处理的复杂度增加,我们还需要使用一些工具库如GSON来解析和生成这些数据格式。

本文将详细介绍Android中常用的JSON、XML、GSON解析的原理。

一、JSON解析原理JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。

在Android中,我们通常使用各种库来解析JSON数据,其中最常见的是org.json和Gson。

.json解析原理org.json是一个轻量级的JSON解析库,它提供了简单易用的API来解析和生成JSON数据。

在Android中,我们可以通过以下步骤使用org.json库解析JSON数据:(1)引入org.json库。

(2)创建JSONObject或JSONArray对象,并使用API将JSON数据转换为该对象。

(3)使用API获取JSONObject或JSONArray中的数据。

org.json解析速度快,且提供了丰富的API来操作JSON数据,但是需要注意的是,org.json库只支持到JSON2019版本为止的JSON语法。

2.Gson解析原理Gson是Google开发的一个Java库,用于将Java对象转换为JSON格式的数据,以及将JSON数据转换回Java对象。

在Android中,我们通常使用Gson库来解析JSON数据。

Gson库提供了简单易用的API,可以方便地将Java对象转换为JSON格式的数据,同时也可以将JSON数据转换为Java对象。

Gson解析JSON数据的基本步骤如下:(1)引入Gson库。

(2)创建Gson对象。

(3)使用Gson对象的fromJson方法将JSON数据转换为Java对象。

(4)使用Gson对象的toJson方法将Java对象转换为JSON数据。

Android-解析JSON数据(JSON对象JSON数组)

Android-解析JSON数据(JSON对象JSON数组)

Android-解析JSON数据(JSON对象JSON数组)在上⼀篇博客中,,讲解到Android真实开发中更多的是去解析JSON数据(JSON对象/JSON数组)封装JSON的数据是在服务器端进⾏封装了,Android更多的⼯作是解析(JSON对象/JSON数组),所以Android开发JSON数据的解析⾮常重要JSON数据,是存储在⽂件⾥⾯:/data/data/liudeli.mynetwork01/files/pottingJSON1{"name":"李四","age":99,"hobby":"爱好是练习截拳道"}/data/data/liudeli.mynetwork01/files/pottingJSON2{"student":{"name":"李四","age":99,"hobby":"爱好是练习截拳道"}}/data/data/liudeli.mynetwork01/files/pottingJSON3{"student":{"name":"李四","age":99,"hobby":"爱好是练习截拳道","dog":{"name":"阿黄","age":77,"sex":"母"}}}/data/data/liudeli.mynetwork01/files/pottingJSONArray1[{"name":"君君","age":89,"sex":"男"},{"name":"⼩君","age":99,"sex":"⼥"},{"name":"⼤君","age":88,"sex":"男"}]/data/data/liudeli.mynetwork01/files/pottingJSONArray2{"person":[{"name":"君君","age":89,"sex":"男"},{"name":"⼩君","age":99,"sex":"⼥"},{"name":"⼤君","age":88,"sex":"男"}]}为什么要使⽤jsonObject.optString,不使⽤jsonObject.getString因为jsonObject.optString获取null不会报错看着JSON数据,⼀步⼀步的解析就好了,当明⽩JSON数据格式后,解析是⾮常容易的:AnalyzeJSONActivity.javapackage liudeli.mynetwork01;import android.app.Activity;import android.os.Bundle;import android.text.TextUtils;import android.util.Log;import android.view.View;import org.json.JSONArray;import org.json.JSONObject;import java.io.InputStream;public class AnalyzeJSONActivity extends Activity {private final String TAG = AnalyzeJSONActivity.class.getSimpleName();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.activity_analyze_json);}/*** 解析JSON对象* {* "name":"李四",* "age":99,* "hobby":"爱好是练习截拳道"* }* @param view*/public void analyzeJSON1(View view) {String result = readFile("pottingJSON1");// Log.d(TAG, "result:" + result);try{JSONObject jsonObject = new JSONObject(result);/*** 为什么要使⽤jsonObject.optString,不使⽤jsonObject.getString* 因为jsonObject.optString获取null不会报错*/String name = jsonObject.optString("name", null);int age = jsonObject.optInt("age", 0);String hobby = jsonObject.optString("hobby", null);// ⽇志打印结果:Log.d(TAG, "analyzeJSON1解析的结果:name:" + name + " age:" + age + " hobby:" + hobby);} catch (Exception e) {e.printStackTrace();}}/*** 解析JSON对象-带Key* {* "student":{* "name":"李四",* "age":99,* "hobby":"爱好是练习截拳道"* }* }* @param view*/public void analyzeJSON2(View view) {String result = readFile("pottingJSON2");// Log.d(TAG, "result:" + result);try{// 整个最⼤的JSON对象JSONObject jsonObjectALL = new JSONObject(result);/*** 为什么要使⽤jsonObject.optString,不使⽤jsonObject.getString* 因为jsonObject.optString获取null不会报错*/String student = jsonObjectALL.optString("student", null);if (!TextUtils.isEmpty(student)) {JSONObject jsonObject = new JSONObject(student);String name = jsonObject.optString("name", null);int age = jsonObject.optInt("age", 0);String hobby = jsonObject.optString("hobby", null);// ⽇志打印结果:Log.d(TAG, "analyzeJSON2解析的结果:name:" + name + " age:" + age + " hobby:" + hobby); }} catch (Exception e) {e.printStackTrace();}}/*** 解析JSON对象-嵌套对象* {* "student":{* "name":"李四",* "age":99,* "hobby":"爱好是练习截拳道",* "dog":{* "name":"阿黄",* "age":77,* "sex":"母"* }* }* }* @param view*/public void analyzeJSON3(View view) {String result = readFile("pottingJSON3");// Log.d(TAG, "result:" + result);try{// 整个最⼤的JSON对象JSONObject jsonObjectALL = new JSONObject(result);/*** 为什么要使⽤jsonObject.optString,不使⽤jsonObject.getString* 因为jsonObject.optString获取null不会报错*/String student = jsonObjectALL.optString("student", null);if (!TextUtils.isEmpty(student)) {JSONObject jsonObject = new JSONObject(student);String name = jsonObject.optString("name", null);int age = jsonObject.optInt("age", 0);String hobby = jsonObject.optString("hobby", null);// 以下是dog JSON 对象相关的解析String dogStr = jsonObject.optString("dog", null);// 定义dog的JSON对象JSONObject dogJSONObject = new JSONObject(dogStr);String dogName = dogJSONObject.optString("name", null);int dogAge = dogJSONObject.optInt("age", 0);String dogSex = dogJSONObject.optString("sex", null);// ⽇志打印结果:Log.d(TAG, "analyzeJSON3解析的结果:name:" + name + " age:" + age + " hobby:" + hobby + "\n"+ "dogName:" + dogName + " dogAge:" + dogAge + " dogSex:" + dogSex);}} catch (Exception e) {e.printStackTrace();}}/*** 解析JSON数组* [* {* "name":"君君",* "age":89,* "sex":"男"* },* {* "name":"⼩君",* "age":99,* "sex":"⼥"* },* {* "name":"⼤君",* "age":88,* "sex":"男"* }* ]* @param view*/public void analyzeJSONArray1(View view) {String result = readFile("pottingJSONArray1");// Log.d(TAG, "result:" + result);try{// 整个最⼤的JSON数组JSONArray jsonArray = new JSONArray(result);Log.d(TAG, "analyzeJSONArray1 jsonArray:" + jsonArray);// [{"name":"君君","age":89,"sex":"男"},{"name":"⼩君","age":99,"sex":"⼥"},{"name":"⼤君","age":88,"sex":"男"}] for (int i = 0; i < jsonArray.length(); i++) {// JSON数组⾥⾯的具体-JSON对象JSONObject jsonObject = jsonArray.getJSONObject(i);String name = jsonObject.optString("name", null);int age = jsonObject.optInt("age", 0);String sex = jsonObject.optString("sex", null);// ⽇志打印结果:Log.d(TAG, "analyzeJSONArray1 解析的结果:name" + name + " age:" + age + " sex:" + sex);}} catch (Exception e) {e.printStackTrace();}}/*** 解析JSON数组-带Key* {* "person":[* {* "name":"君君",* "age":89,* "sex":"男"* },* {* "name":"⼩君",* "age":99,* "sex":"⼥"* },* {* "name":"⼤君",* "age":88,* "sex":"男"* }* ]* }* @param view*/public void analyzeJSONArray2(View view) {String result = readFile("pottingJSONArray2");// Log.d(TAG, "result:" + result);try{/*** JSON数组在⽜逼,⼀旦有了 key person 这样的标记,就必须先是个 JSON对象* 最外层的JSON对象,最⼤的哪个 { ... }*/JSONObject jsonObjectALL = new JSONObject(result);// 通过标识(person),获取JSON数组JSONArray jsonArray = jsonObjectALL.getJSONArray("person");Log.d(TAG, "analyzeJSONArray1 jsonArray:" + jsonArray);// [{"name":"君君","age":89,"sex":"男"},{"name":"⼩君","age":99,"sex":"⼥"},{"name":"⼤君","age":88,"sex":"男"}] for (int i = 0; i < jsonArray.length(); i++) {// JSON数组⾥⾯的具体-JSON对象JSONObject jsonObject = jsonArray.getJSONObject(i);String name = jsonObject.optString("name", null);int age = jsonObject.optInt("age", 0);String sex = jsonObject.optString("sex", null);// ⽇志打印结果:Log.d(TAG, "analyzeJSONArray2 解析的结果:name" + name + " age:" + age + " sex:" + sex);}} catch (Exception e) {e.printStackTrace();}}/*** 读取⽂件⾥⾯的字符串* @param fileName* @return*/private String readFile(String fileName) {String result = null;try {InputStream inputStream = openFileInput(fileName);byte[] bytes = new byte[inputStream.available()];inputStream.read(bytes);result = new String(bytes);inputStream.close();} catch (Exception e) {e.printStackTrace();}return result;}/*** 定义⼀个Bean*//*class Student {private String name;private int age;private String hobby;public Student(String name, int age, String hobby) { = name;this.age = age;this.hobby = hobby;}@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +", hobby='" + hobby + '\'' +'}';}}*/}activity_analyze_json.xml<?xml version="1.0" encoding="utf-8"?><LinearLayoutxmlns:android="/apk/res/android"xmlns:tools="/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context=".MainActivity"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="解析JSON对象"android:onClick="analyzeJSON1"android:layout_weight="1"/><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="解析JSON对象-带Key"android:onClick="analyzeJSON2"android:layout_weight="1"/><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="解析JSON对象-嵌套对象"android:onClick="analyzeJSON3"android:layout_weight="1"/></LinearLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="解析JSON数组"android:onClick="analyzeJSONArray1"android:layout_weight="1"/><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="解析JSON数组-带Key"android:onClick="analyzeJSONArray2"android:layout_weight="1"/></LinearLayout></LinearLayout>所有解析JSON的Log打印:analyzeJSON112-23 21:46:44.127 8204-8204/liudeli.mynetwork01 D/AnalyzeJSONActivity: analyzeJSON1解析的结果:name:李四 age:99 hobby:爱好是练习截拳道analyzeJSON212-23 21:46:59.161 8204-8204/liudeli.mynetwork01 D/AnalyzeJSONActivity: analyzeJSON2解析的结果:name:李四 age:99 hobby:爱好是练习截拳道analyzeJSON312-23 21:47:12.240 8204-8204/liudeli.mynetwork01 D/AnalyzeJSONActivity: analyzeJSON3解析的结果:name:李四 age:99 hobby:爱好是练习截拳道dogName:阿黄 dogAge:77 dogSex:母analyzeJSONArray112-23 21:47:35.108 8204-8204/liudeli.mynetwork01 D/AnalyzeJSONActivity: analyzeJSONArray1 解析的结果:name君君 age:89 sex:男12-23 21:47:35.108 8204-8204/liudeli.mynetwork01 D/AnalyzeJSONActivity: analyzeJSONArray1 解析的结果:name⼩君 age:99 sex:⼥12-23 21:47:35.108 8204-8204/liudeli.mynetwork01 D/AnalyzeJSONActivity: analyzeJSONArray1 解析的结果:name⼤君 age:88 sex:男analyzeJSONArray212-23 21:47:55.457 8204-8204/liudeli.mynetwork01 D/AnalyzeJSONActivity: analyzeJSONArray2 解析的结果:name君君 age:89 sex:男12-23 21:47:55.457 8204-8204/liudeli.mynetwork01 D/AnalyzeJSONActivity: analyzeJSONArray2 解析的结果:name⼩君 age:99 sex:⼥12-23 21:47:55.457 8204-8204/liudeli.mynetwork01 D/AnalyzeJSONActivity: analyzeJSONArray2 解析的结果:name⼤君 age:88 sex:男。

解析json的3种方法

解析json的3种方法

解析json的3种方法解析JSON数据有三种常见的方法:手动解析、使用第三方库和利用语言内置的解析器。

下面将详细介绍这三种方法。

1. 手动解析手动解析是最基本的JSON解析方法之一。

它适用于简单的JSON结构和较小的JSON文件。

手动解析的主要步骤包括以下几个方面:1.1 读取JSON数据首先,需要将JSON数据读取到内存中。

可以使用文件读写操作或网络请求等方式获取JSON数据,然后将数据存储在字符串变量中。

1.2 解析JSON数据接下来,需要逐个解析JSON数据的各个字段。

JSON数据由键值对组成,每个键对应一个值。

可以使用字符串处理操作(例如截取子字符串)和正则表达式等方式逐步解析JSON数据。

手动解析需要注意处理JSON数据中可能出现的异常情况,例如缺失的字段或字段值为null等。

1.3 获取JSON字段值完成解析后,可以通过键来获取对应的值。

根据JSON数据的结构,可以使用字符串处理操作和类型转换等方式将获取到的值转换为所需的数据类型,例如字符串、整数、浮点数等。

手动解析的优点是灵活性高,适用于简单的JSON结构和小型JSON文件。

缺点是需要编写较多的代码来处理JSON数据,且容易出错。

2. 使用第三方库第二种方法是使用第三方库来解析JSON数据。

大多数编程语言都提供了丰富的JSON解析库,例如Python中的json库、Java中的Gson和Jackson库,以及JavaScript中的JSON.parse()等。

使用第三方库的主要步骤如下:2.1 导入第三方库首先,需要导入所需的JSON解析库。

可以使用包管理工具或手动将库文件添加到项目中。

2.2 加载JSON数据接下来,需要将JSON数据加载到程序中。

可以使用文件读写操作或网络请求等方式获取JSON数据,并将其存储在合适的数据结构中(例如字符串、字典或列表)。

2.3 解析JSON数据使用第三方库提供的API,可以方便地解析JSON数据。

Android数据格式解析对象JSON用法

Android数据格式解析对象JSON用法

Android数据格式解析对象JSON用法1.JSON概念:一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性,从而可以在不同平台间进行数据交换。

JSON采用兼容性很高的文本格式,同时也具备类似于C语言体系的行为。

JSON可以将Java对象转成json格式的字符串,可以将json字符串转换成Java。

比XML 更轻量级,Json使用起来比较轻便和简单。

JSON数据格式,在Android中被广泛运用于客户端和服务器通信,在网络数据传输与解析时非常方便。

2.环境配置/p/google-gson/里有一个名为Gson的类库,可以用它来解析Json数据,并且,Adroid 3.0平台里其实也就是把这一部分直接整合进Android里了。

我们要解析Json数据,直接去网站上下载个jar包,导入到工程里,就可以解析Json数据了。

3.JSON应用(1).JSON是一种轻量级的数据交换格式(2).JSON基于两种数据结构:Object和Array。

其中Object是“名称/值”对的集合。

(3)在Android中包含四个与JSON相关的类和一个Exceptions:a.JSONObject这是系统中有关JSON定义的基本单元,其包含一对儿(Key/Value)数值。

b.JSONArray它代表一组有序的数值。

将其转换为String输出(toString)所表现的形式是用方括号包裹,数值以逗号”,”分隔(例如:[value1,value2,value3]c.JSONStringer这个类可以帮助快速和便捷的创建JSONtext。

其最大的优点在于可以减少由于格式的错误导致程序异常,引用这个类可以自动严格按照JSON语法规则(syntaxrules)创建JSON text。

每个JSONStringer实体只能对应创建一个JSON text。

例如:String myString = new JSONStringer().object().key("name").value("小猪").endObject().toString();myString ={"name" : "小猪"}d.JSONTokener这个是系统为JSONObject和JSONArray构造器解析JSON source string的类,它可以从source string中提取数值信息。

json解析原理

json解析原理

json解析原理一、介绍JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,常用于前后端数据传输和存储。

在进行JSON数据的使用和处理过程中,需要进行JSON解析,将JSON字符串转化为可供程序读取和操作的数据对象。

本文将介绍JSON解析的原理和实现方式。

二、原理JSON解析的基本原理是将JSON字符串解析为内存中的数据结构,通常是对象(Object)或数组(Array)。

解析过程包括以下几个步骤:1. 词法分析(Lexical Analysis):将JSON字符串分解为基本的词元(token),如左大括号、右大括号、冒号、逗号、字符串、数字等。

词法分析是解析过程的第一步,它将字符串转化为一个个有意义的词元。

2. 语法分析(Syntax Analysis):根据JSON语法规则,对词元进行规约,构建语法树(Parse Tree)。

语法分析器根据文法规则和词元之间的关系,将词元组织为具有层次结构的语法树。

3. 语义分析(Semantic Analysis):根据语法树,对数据进行验证和处理。

语义分析器将对语法树进行遍历,验证数据类型的正确性,并将数据转化为程序可处理的形式。

4. 数据存储(Data Storage):将解析得到的数据存储在内存中的对象或数组中,以便程序进行后续的读取和操作。

三、实现方式JSON解析可以通过多种方式实现,以下是常用的几种方法:1. 手动解析:通过编写自定义的解析器,逐字符读取JSON字符串,根据语法规则进行词法分析和语法分析,最终构建出数据结构。

2. 第三方库:使用现有的JSON解析库,如Gson、Jackson等。

这些库提供了简单易用的API,可以方便地解析JSON字符串并转化为对象或数组。

3. 编程语言自带解析器:许多编程语言都提供了自带的JSON解析器,例如Python中的json模块、JavaScript中的JSON对象等。

json的解析方式

json的解析方式

json的解析方式JSON的解析方式随着互联网的快速发展,数据的交换和传输变得越来越重要。

而JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式,广泛应用于各个领域。

在使用JSON数据的过程中,解析是一个至关重要的步骤,本文将介绍几种常见的JSON解析方式。

一、JSON解析方式概述JSON数据由键值对组成,使用大括号{}包围,键值对之间使用逗号分隔。

在解析JSON数据时,主要有两个方向:将JSON数据解析为对象或将JSON数据解析为字符串。

下面将分别介绍这两种方式的解析方法。

二、将JSON数据解析为对象1. 使用编程语言提供的内置函数大多数编程语言都提供了内置的JSON解析函数,例如Python中的json.loads()函数、JavaScript中的JSON.parse()函数等。

这些函数可以将JSON数据解析为对象,并方便地操作和访问其中的数据。

2. 使用第三方库除了内置函数,还可以使用第三方库来解析JSON数据。

一些流行的JSON解析库包括Jackson、Gson、Fastjson等。

这些库通常提供了更丰富的功能和更高的性能,可以满足各种复杂的解析需求。

三、将JSON数据解析为字符串1. 使用编程语言提供的内置函数与将JSON数据解析为对象相反,将JSON数据解析为字符串是将对象转化为JSON数据的逆过程。

编程语言通常提供了内置的函数来实现这一功能,例如Python中的json.dumps()函数、JavaScript中的JSON.stringify()函数等。

2. 使用第三方库与解析为对象类似,也可以使用第三方库来将JSON数据解析为字符串。

这些库通常提供了更多的选项和定制化功能,可以满足不同场景下的需求。

四、解析方式的选择和注意事项在选择JSON解析方式时,需要考虑以下几个因素:1. 编程语言的支持:不同的编程语言可能提供不同的解析方式,需要根据具体情况进行选择。

JSON最常用的两种数据解析方法

JSON最常用的两种数据解析方法

JSON最常用的两种数据解析方法JSON(JavaScript Object Notation)是一种用于存储和交换数据的格式,它易于阅读和编写,并且在不同的编程语言中都有广泛的支持。

对于解析JSON数据,常用的方法有两种:手动解析和使用现有的库。

1.手动解析:手动解析是一种基于编程语言原生功能的方式,需要根据JSON数据的结构进行逐级解析。

首先,我们需要将JSON数据转换为字符串,然后使用原生字符串操作函数来解析数据。

通常,我们可以使用字符串拆分、正则表达式等方法来逐级解析JSON数据。

例如,在JavaScript中,我们可以使用split(方法将字符串拆分成数组,然后使用循环和条件语句来处理各个元素。

这种方法的优点是使用原生功能,无需引入额外的库,但是要求编写更多的代码来处理不同类型的数据和错误情况。

2.使用现有的库:现有的库是常用的解析JSON数据的方法,不同语言中有许多成熟的库可以选择。

这些库提供了更高级的功能和易用性,可以大大简化解析JSON数据的过程。

例如,对于Python语言,有许多著名的库,如json、simplejson和ujson。

这些库提供了一系列的API函数,可以方便地将JSON数据转换为Python对象,以及将Python对象转换为JSON数据。

使用这些库,我们可以简单地通过调用适当的函数来解析和处理JSON数据,而无需手动编写许多代码。

类似地,JavaScript语言也有一些出色的库,如JSON.parse(和jQuery的$.parseJSON(方法。

这些库提供了易用的解析函数,可以直接将JSON字符串转换为JavaScript对象。

这样,我们可以直接操作JavaScript对象,而无需手动解析每个元素。

使用现有的库的好处是它们的功能强大,并且根据各种需求提供了多种API函数。

它们通常有良好的错误处理机制,可以帮助我们处理解析过程中可能遇到的各种问题。

此外,这些库通常是经过优化的,并且在实践中经过了广泛的测试和应用,因此它们的性能和稳定性更高。

Json解析及解析原理

Json解析及解析原理

Json解析及解析原理1. JSON的定义: ⼀种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性。

业内主流技术为其提供了完整的解决⽅案(有点类似于正则表达式,获得了当今⼤部分语⾔的⽀持),从⽽可以在不同平台间进⾏数据交换。

JSON采⽤兼容性很⾼的⽂本格式,同事也具备类似于C语⾔体系的⾏为。

2. JSON VS XML1). JSON和XML的书可读性基本相同;2). JSON和XML同样拥有丰富的解析⼿段;3). JSON相对于XML来讲,数据的体积⼩;4). JSON与JavaScript的交互更加⽅便;5). JSON对数据的描述性⽐XML较差;6). JSON的速度要远远快于XML;7). JSON数据可使⽤AJAX进⾏传输;8). JSON具有层级结构(值中存在值)3. JSON语法规则JSON语法是JavaScript对象表⽰法语法的⼦集。

1) 数据在名称/值对中;2) 数据由逗号分隔;3) 花括号保存对象;4) ⽅括号保存数组4. JSON值JSON值可以是:1) 数字(证书或浮点数)2) 字符串(在双引号中)3) 逻辑值(true或false)4) 数组(在⽅括号中)5) 对象(在花括号中)6) null5. JSON对象JSON对象在花括号中书写:对象可以包含多个名称/值对:{"firstName":"John", "lastName":"Doe"}6. JSON数组JSON数组在⽅括号中书写:数组可包含多个对象:{"employees":[{"firstName":"John", "lastName":"Doe"}{"firstName":"Anna", "lastName":"Smith"}{"firstName":"Peter", "lastName":"Jones"}]}7. JSON使⽤JavaScript因为JSON使⽤JavaScript语法,所以⽆需额外的软件就能处理JavaScript中的JSON。

JSON数据解析

JSON数据解析
一、LED点阵的结构
常见的LED点阵有4×4(4行4列)、4×8、5×7(5行 7列)、5×8、 8×8、16×16、24×24以及40×40等 多种,点阵总点数为行与列的乘积。 通过对每个发光二极管的控制,LED点阵可显示各种 字符或图形。 显示一个汉字一般采用16×16点阵。 本任务显示汉字时使用的16×16点阵由四个8×8点阵 组成。
程称为取模。
共阴点阵显示时:行线为选通端,
列线输入字模数据
R15
任务四:Json数据解析-Json介绍
JsonObject类的常用方法:
属性设置 public JSONObject() public JSONObject(String json) public Object get(String name) public int getInt(String name) public int getString(String name) public int length()
说明 增加一个int类型的数据
public JSONObject put(String name,Boolean value) 增加一个boolean类型的数据
public JSONObject put(String name,Object value) 增加一个Object类型的数据
移动物联网任简务介一知识储备—LED点阵与单片机的接口技术
一、LED点阵的结构
LED点阵与单片 机的接口技术
二、LED点阵显示原理
三、点阵与单片机的接口电路
移动物联网任简务介一知识储备—LED点阵与单片机的接口技术
二、LED点阵显示原理
LED点阵一般采用动态显示方式。 1.8×8共阴点阵显示原理
移动物联网简介
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,为Web应用开发提供了一种理想的数据交换格式。

在上一篇博文《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数据。

该方法的具体实现如下。

1public class JsonTools {23/*4 * Function : 生成JSON字符串5 * Param : value 想要转换成JSON字符串的Object对象6 * Retuen : JSON字符串7 * Author : 博客园-依旧淡然8*/9public static String createJsonString(Object value) {10 Gson gson = new Gson();11 String string = gson.toJson(value);12return string;13 }1415}可以看到,这个方法的具体实现非常简单,首先创建一个Gson对象,然后通过调用Gson对象的toJson()方法,将传进来的value(任意的Java对象)转换成JSON字符串即可。

通过使用该方法,我们可以很方便的将任意Java对象传递进来,并将其转化成JSON数据。

和上一篇博文中一样,我们可以在JsonService类中,实现一个简单的获取Person对象列表的方法,具体如下:1/*2 * Function : 获取Person对象列表3 * Author : 博客园-依旧淡然4*/5public List<Person> getListPerson() {6 List<Person> list = new ArrayList<Person>();7 Person person1 = new Person(001, "jack", 25);8 Person person2 = new Person(002, "rose", 24);9 Person person3 = new Person(003, "bob", 26);10 list.add(person1);11 list.add(person2);12 list.add(person3);13return list;14 }在该方法中,我们向List列表中加入了3个Person对象,每个Person对象具有id(int)、name (String)和age(int)三个属性。

最后,我们还需要创建一个继承自HttpServlet的JsonAction类,并实现其中的doPost()方法,用来响应客户端对服务器的请求。

具体如下:1public void doPost(HttpServletRequest request, HttpServletResponse response)2throws ServletException, IOException {34 response.setContentType("text/html;charset=utf-8");5 request.setCharacterEncoding("utf-8");6 response.setCharacterEncoding("utf-8");7 PrintWriter out = response.getWriter();89 List<Person> listPerson = jsonService.getListPerson();1011 String str = null;12 String action_flag = request.getParameter("action_flag");13if(action_flag.equals("persons") {14 str = JsonTools.createJsonString(listPerson);15 }16 out.println(str);17 out.flush();18 out.close();19 }在该方法中,我们通过调用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包。

具体的实现方法如下。

1/*2 * Function : 解析JSON数据,还原成Person对象列表3 * Param : jsonString 从服务器获得的Json数据4 * Retuen : Person对象列表5 * Author : 博客园-依旧淡然6*/7public static List<Person> getListPerson(String jsonString) {8 List<Person> list = new ArrayList<Person>();9 Gson gson = new Gson();10 list = gson.fromJson(jsonString, new TypeToken<List<Person>>(){}.getType());11return list;12 }可以看到,使用GSON解析JSON数据的代码实现也非常简单。

其中,TypeToken是GSON提供的数据类型转换器,支持多种数据集合类型转换,其反射机制可以实现将解析出来的Java对象映射到对应的数据集合中。

在本实例中,同样点击Button按钮向服务器发送获取JSON数据的请求,从服务器获得JSON数据后,使用以上的代码完成对JSON数据的解析,最后将解析得到的Person对象依次显示在TextView控件中。

程序运行的结果如图2所示。

相关文档
最新文档