`
lovehzh
  • 浏览: 8774 次
  • 性别: Icon_minigender_1
  • 来自: 湖北
社区版块
存档分类
最新评论

工作点滴之Json解析

阅读更多

      Android开发过程中,数据传输是难免的,一般组织数据有两种方式:xml格式和json格式。两者解析都非常方便,而且解析工具也都很多,这里不多作比较。

      下面就Json格式的解析做一个比较实用的分析:

       1) 解析Json格式的数据

       2) 解析单个对象

       3) 解析对象的集合 

 

一 大前提--什么是Json ?

1.如果不知道什么是Json,先扫一下盲

1)JSON:JavaScript Object Notation

2)  JSON数据是一系列键值对的集合

3)官方网址:www.json.org, 去看看就什么都明白了

 

2.Json vs xml

1) JSON和XML可读性基本相同

2)JSON和XML通用拥有丰富的解析手段

3)JSON相对XML来讲体积更小

4)JSON与JavaScript的交互性更加方便

5) JSON对数据的描述性相对较差

 

二 Android 中的JSON解析工具

1.从API level 11 开始(也就是Android3.0),在android.util包下就有了JsonReader 和 JsonWriter两个帮助类,供我们来解析和使用json。

 

2.Android3.0以下系统的最佳的做法是使用Google的gson类库来解析,其实这也是3.0以后的做法,只是集成了进来,

下载地址:http://code.google.com/p/google-gson/downloads/list

 

3.下载后的jar文件导入到项目中,我相信这大家都会,下面的例子我采用的是gson来解析。

 

三 JSON实战

1. 解析json格式的数据

比如说有一个User对象,他有两个属性:name和age,当然实际情况可能有更多的属性,

那么用json格式表示就是:{name:"Ian", age: "20"},我相信你懂的。

1)自定义JSON帮助类--JsonUtils

public class JsonUtils {
	
	public void parseJson(String jsonData) {
		
		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("name")) {
						System.out.println("name--->" + reader.nextString());
					} else if(tagName.equals("age")) {
						System.out.println("age--->" + reader.nextString());
					}
				}
				reader.endObject();
			}
			reader.endArray();
		} catch (IOException e) {
			e.printStackTrace();
		}
		
	}
}
 

 

2) Activity代码

 

public class MainActivity extends Activity {
    private Button btnStart;
    private String jsonDataUser = "{\"name\":\"Ian\",\"age\":20}";


    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        btnStart = (Button)findViewById(R.id.btnStart);
        btnStart.setOnClickListener(new BtnStartSetOnClickListener());
        
        
    }
    
    private class BtnStartSetOnClickListener implements OnClickListener {
		@Override
		public void onClick(View v) {
			JsonUtils jsonUtils = new JsonUtils();
			jsonUtils.parseJson(jsonData);
		}
    }
} 

 就这么几行代码,在Console上就可以看到解析输出的信息了,是不是很简单呢?

 

 

2. 解析对象

1)上面解析的是字符串形式,如果我们定义一个User对象会怎么样呢?

 

public class User {
	private String name;
	private int age;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
}
 

2) 解析方法

 

public void parseUserFromJson(String jsonData) {
	
	Gson gson =new Gson();
	User user = gson.fromJson(jsonData, User.class);
	System.out.println("name---------->" + user.getName());
	System.out.println("age---------->" + user.getAge());   
	
}
 

是不是更简单了呢?

 

3. 解析集合

1)如果不是单个User,而是ArrayList<User>,那么该怎么解析啊,因为这个太常见了。

要解决这个问题,得先弄明白集合用json该怎么表示,简单来讲“{}”表示一个对象,“[]”表示一个集合,集合里面可以有多个对象,这样表示[{},{},{}]。OK,那么看实战代码,

json数据:

 

private String jsonDataUsers = "[{\"name\":\"Jack\",\"age\":20},{\"name\":\"Tom\",\"age\":22},{\"name\":\"Ian\",\"age\":20}]";

 解析代码:

 

public void parseUserFromJson(String jsonData) {

		Type typeList = new TypeToken<ArrayList<User>>(){}.getType();
		Gson gson = new Gson();
		LinkedList<User> users = gson.fromJson(jsonData, typeList);
		for(Iterator<User> iterator = users.iterator(); iterator.hasNext();) {
			User user = iterator.next();
			System.out.println("name---------->" + user.getName());
			System.out.println("age---------->" + user.getAge());
		}
	}
 

我们可以看到,只是多了一行“Type typeList = new TypeToken<ArrayList<User>>(){}.getType();”,就可以解析出List来,然后迭代List就可以得到整个数据

了,真的很方便,还等什么呢,赶快试试看吧!

1
1
分享到:
评论

相关推荐

    manifest.json 解析.docx

    manifest.json 的解析和配置对于确保App的正常运行和用户体验至关重要。 在HBuilderX中,manifest.json 文件的配置有两种方式:可视化界面和源码视图。在项目管理器中,你可以轻松地打开可视化界面进行配置,它提供...

    点滴支付商户接入规范V1.0.81

    商户在接入点滴支付时,必须严格按照这些规范来构造请求参数、生成签名以及解析响应数据,以确保交易的安全和正确性。对于开发人员来说,理解和掌握这些规则至关重要,因为任何细微的错误都可能导致交易失败或安全...

    Nodejs学习点滴

    `build.js`和`DomTree.js`这两个文件分别代表了项目构建和HTML解析的实践,而`package.json`则反映了Node.js项目管理和依赖管理的基本流程。学习和理解这些内容对于深入掌握Node.js开发至关重要。

    QQ空间多Cookies留言.rar

    QQ空间是中国最受欢迎的社交平台之一,用户们经常在其中分享生活点滴、心情感悟,并通过留言进行互动。在技术层面上,"QQ空间多Cookies留言"指的是利用编程技术,通过多个不同的Cookies来实现对同一个QQ空间的多次...

    JsonUtil工具类

    2. `jackson-core`:这是Jackson的基础模块,提供基本的JSON解析和生成功能,不涉及Java对象的映射。它包含读写JSON流式API,可以处理JSON文本的输入输出。 3. `jackson-annotations`:这个模块包含了各种注解,...

    仿QQ空间说说 评论/回复 效果源码

    7. JSON解析:接收和发送服务器数据通常采用JSON格式,需要了解如何进行JSON解析和序列化。 8. 用户权限控制:确保只有授权的用户才能进行评论和回复,可能涉及到登录验证和OAuth等安全机制。 通过分析这个源码,...

    Android 腾讯微博 部分源码

    2. **数据解析与展示**:源码可能包含XML或JSON解析的代码,用于将服务器返回的数据转化为Java对象,并显示在界面上。这涉及到Android的AsyncTask或者LiveData等组件,用于在后台线程处理数据,避免UI线程阻塞。 3....

    delphi2010欣赏

    Delphi2010对RESTful的支持使得开发者能够更好地构建RESTful服务,比如通过Delphi2010可以进行RESTful概念解析与运用,从而让应用程序实现更加灵活和可扩展。 Delphi2010还涉及到多层次架构设计的相关知识。它支持...

    易语言取QQ空间日志

    QQ空间是中国流行的社交网络平台之一,用户可以在这里发布、分享和阅读日志,记录生活点滴或表达观点。而“取QQ空间日志”是指通过程序自动化的方式,获取特定用户或者公开的日志内容。这种功能通常需要处理网络请求...

    android新浪微博客户端

    2. **JSON解析**:微博数据通常以JSON格式传输,客户端通过解析JSON来获取和展示内容。 3. **Http网络通信**:使用Http协议进行网络请求,实现数据的上传和下载,如登录验证、获取信息流、发送微博等。 4. **...

    人人爬虫 ( 一键下载好友相册日志 )

    人人网是中国早期的一个社交网络平台,用户可以在上面分享照片、发布日志,记录生活点滴。在本项目"人人爬虫 ( 一键下载好友相册日志 )"中,我们探讨的是如何通过编写爬虫程序,实现自动化地下载人人网上好友的...

    安卓微信相关相关-仿微信朋友圈回复功能.zip

    4. JSON解析:朋友圈信息、评论和回复可能以JSON格式从服务器获取。安卓应用需要使用Gson或Jackson等库将JSON数据转化为Java对象。 5. 网络请求:使用OkHttp或Retrofit等网络库进行HTTP请求,获取或发送朋友圈数据...

    Android 人人测试端

    4. **JSON解析**:查看如何解析人人网API返回的JSON数据,转化为Android能使用的对象。 5. **异步处理**:学习如何使用AsyncTask或者IntentService来避免因网络操作导致的主线程阻塞。 6. **权限管理**:理解Android...

    高仿微信朋友圈

    可以使用 Retrofit(Android)或Alamofire(iOS)等网络库,结合JSON解析库如Gson或Jackson进行数据解析。 6. **图片上传**:用户可能需要上传图片到服务器,这需要处理图片的压缩、裁剪等预处理工作,以减少上传...

    微信小程序云开发:大创+表情识别+日记记录+颜值测评+查询心情汇总

    日记记录功能允许用户方便地存储和查看个人日常生活中的点滴。小程序可以提供文本编辑器,让用户输入文字,还可以结合表情识别,将用户拍摄的照片或选择的表情与文字一起保存,形成图文并茂的日记条目。同时,云...

    校园小情书 ,补上前端源码,互相学习学习school_wechat-master.zip

    【校园小情书——微信小程序前端源码解析】 在当今移动互联网时代,微信小程序作为轻量级的应用形式,因其无需安装、即扫即用的特点,受到了广大开发者和用户的喜爱。"校园小情书"是一个基于微信小程序开发的项目,...

    Android旅游助手app

    - **JSON解析**:处理服务器返回的数据,如景点信息、天气预报等。 - **SQLite数据库**:可能用于存储用户笔记和设置信息。 - **权限管理**:确保应用在访问位置、网络等敏感信息时获取用户授权。 - **通知与推送...

    交友互动小程序源码

    这款源码的实际可用性确保了开发者可以快速搭建起一个稳定的交友应用,减少从零开始编写代码的时间和工作量。 1. **小程序源码结构解析**: - `app.js`:这是小程序的全局配置文件,包含了小程序的启动逻辑和全局...

    微信小程序-你的名字日记源码

    2. **源码解析**:文档会解释每个文件和目录的作用,包括wxml(微信小程序的结构文件)、wxss(样式表文件)、js(逻辑处理文件)和json(配置文件)。通过阅读源码,你可以学习到小程序的数据绑定、事件处理、组件...

Global site tag (gtag.js) - Google Analytics