Android实战技巧之五十二:fastjson
来源:互联网 发布:ms sql server 2017 编辑:程序博客网 时间:2024/05/15 19:20
1、JSON
JSON全称为JavaScript Object Notation,是一种轻量级的数据交换格式。
正因为数据格式简单,所以占用带宽小,网络传输的速度更快些。这一点是老前辈xml的硬伤。
JSON的语法也很简单:
数据在键值对中
数据由逗号分隔
花括号保存对象
方括号保存数组
下面是微信公众帐号开发中获取token的JSON返回值
{"access_token":"I73NddJk_1GPgvVSrYC13w5omdanuiVdj7zvf8YDj1x0IYUDmQxdiMik-IkQwluPd1pWvt6IaM5NI3CnpsKxVWMlYbsrRaAyDJJQTlApesmbA8E4a0xtRWo5sE_e2lDZSZOfAFAZGV","expires_in":7200}
2、fastjson
首先,fastjson是互联网三巨头之一阿里巴巴推出的开源的Java处理JSON的工具库,号称是目前最快的JSON解析库。版本仍在不断升级中,势头很好。
对于国人出的开源作品,个人还是有些情感倾向的。从事软件这一行10载,所用所看皆为外国货,心中难免不爽。国内互联网巨头们不断将自己的代码开源,是一件令人振奋的事情。
所谓有舍才有得,这样的开源事件,让我们能够感觉到大器与国际化。开源并得到同行认可,也彰显其技术实力。最终的结果就是,名利双收。
github地址:https://github.com/alibaba/fastjson
3、简单用法
不同的场景要用不同的jar包,通常我们会下载源码后编译,但对于没有编译环境的童鞋还是很苦恼的,只少目前为止我没有找到官方jar包下载地址。
3.1 Java端用法
1、解析上面token值
通常的做法是建一个Java类对应解析内容,比如叫Access。
package com.linc;public class Access { private String access_token; private String expires_in; public Access() {} public Access(String access_token,String expires_in) { this.access_token = access_token; this.expires_in = expires_in; } public String getAccess_token() { return access_token; } public void setAccess_token(String access_token) { this.access_token = access_token; } public String getExpires_in() { return expires_in; } public void setExpires_in(String expires_in) { this.expires_in = expires_in; }}
而此时的解析代码只需一句:
Access accessParse = JSON.parseObject(JSON_STRING,Access.class); System.out.println("parser: "+accessParse.getAccess_token());
2、生成JSON串并解析Access的list
Access access = new Access("adgdfjlkjlkjsdlkfjslkjf","68900");List<Access> accessList = new ArrayList<Access>();accessList.add(access);Access access2 = new Access("lincyang","12345");accessList.add(access2);String tmp2 = JSON.toJSONString(accessList);System.out.println(tmp2);List<Access> list = JSON.parseObject(tmp2,new TypeReference<List<Access>>(){}); System.out.println("get 1: "+list.get(1).getAccess_token());
3、解析网络返回值
//weixin测试idprivate static final String appId = "wxbea13caead95d9";private static final String appSecret = "f518f8f5fe4dd731a6184e208bf37";public String getAccessToken(){ // 获得ACCESS_TOKEN String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + appId + "&secret=" +appSecret; String accessToken = null; try { URL urlGet = new URL(url); HttpURLConnection http = (HttpURLConnection) urlGet.openConnection(); http.setRequestMethod("GET"); //必须是get方式请求 http.setRequestProperty("Content-Type","application/x-www-form-urlencoded"); http.setDoOutput(true); http.setDoInput(true); System.setProperty("sun.net.client.defaultConnectTimeout", "30000");//连接超时30秒 System.setProperty("sun.net.client.defaultReadTimeout", "30000"); //读取超时30秒 http.connect(); InputStream is =http.getInputStream(); int size =is.available(); byte[] jsonBytes =new byte[size]; is.read(jsonBytes); String message = new String(jsonBytes,"UTF-8"); Access accessParse = JSON.parseObject(message,Access.class); System.out.println("parser: "+accessParse.getAccess_token()); System.out.println("timeout: "+accessParse.getExpires_in()); } catch (Exception e) { e.printStackTrace(); } return accessToken; }
3.2 Android用法
有了上面的例子,在Android上使用也是类似的。
只不过网络操作时要有网络权限,并在workThread中进行操作。
同样的代码,直接用在Android上。
@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mTvMessage = (TextView)findViewById(R.id.tv_message); mEtUrl = (EditText)findViewById(R.id.et_url); parseJson(); new Thread(new Runnable() { @Override public void run() { getAccessToken(); } }).start();}private void parseJson() { Access access = new Access("adgdfjlkjlkjsdlkfjslkjf","68900"); String tmp = JSON.toJSONString(access); Log.d(TAG, tmp); Access accessParse = JSON.parseObject(JSON_STRING,Access.class); Log.d(TAG,"parser: "+accessParse.getAccess_token()); mTvMessage.setText("parser: " + accessParse.getAccess_token()); //arrayList List<Access> accessList = new ArrayList<Access>(); accessList.add(access); Access access2 = new Access("lincyang","12345"); accessList.add(access2); String tmp2 = JSON.toJSONString(accessList); Log.d(TAG, tmp2); List<Access> list = JSON.parseObject(tmp2,new TypeReference<List<Access>>(){}); Log.d(TAG,"get 1: "+list.get(1).getAccess_token()); mTvMessage.append("\nget 1: "+list.get(1).getAccess_token()); }
参考:
1、百度百科
2、《JSON与XML的区别比较》:http://www.cnblogs.com/SanMaoSpace/p/3139186.html
3、《JSON 之FastJson解析》:http://blog.sina.com.cn/s/blog_7ffb8dd501013qas.html
4、《FastJson的基本使用》:http://blog.csdn.net/wx_962464/article/details/37612861
- Android实战技巧之五十二:fastjson
- vtk实战(五十二)—箭头
- Android Api Demos登顶之路(五十二)Search
- Android问题集锦之五十二:unsupported reloc 43
- Android实战技巧之二:组合控件
- Android实战技巧之四:语音识别
- Android 实战技巧之性能测试类
- Android实战技巧之五:读取Excel
- Android实战技巧之十三:APK签名
- Android实战技巧之三十九:短信收发
- Android实战技巧之四十二:加速度传感器
- Android实战技巧之四十四:Hello,Native!
- Android实战技巧之五十三:dom4j&xstream
- Android实战技巧之四十二:加速度传感器
- Android之JSON处理器FastJson
- Android实战简易教程<五十二>(Fragment和Activity之间通信)
- Android实战技巧之四十九:Usb通信之USB Host
- Android实战技巧之四十九:Usb通信之USB Host
- AbstractQueueSynchronizer源码
- 单链表的基本实现
- Python项目之万能的XML
- 【GOF23设计模式】_装饰模式_IO流底层架构_装饰和桥接模式的区别JAVA240
- UIScrollView学习
- Android实战技巧之五十二:fastjson
- log的使用
- 创建一个纯CSS下拉菜单,支持三级菜单
- Lisp 的本质
- https://github.com/obdev/v-usb
- 编解码学习笔记(三):Mpeg系列——Mpeg 1和Mpeg 2
- lPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.
- leetcode 之reverse string ,Nim game, add digits
- 安装mplayer