編輯:關於Android編程
JSON全稱為JavaScript Object Notation,是一種輕量級的數據交換格式。
正因為數據格式簡單,所以占用帶寬小,網絡傳輸的速度更快些。這一點是老前輩xml的硬傷。
JSON的語法也很簡單:
數據在鍵值對中
數據由逗號分隔
花括號保存對象
方括號保存數組
下面是微信公眾帳號開發中獲取token的JSON返回值
{"access_token":"I73NddJk_1GPgvVSrYC13w5omdanuiVdj7zvf8YDj1x0IYUDmQxdiMik-IkQwluPd1pWvt6IaM5NI3CnpsKxVWMlYbsrRaAyDJJQTlApesmbA8E4a0xtRWo5sE_e2lDZSZOfAFAZGV","expires_in":7200}
首先,fastjson是互聯網三巨頭之一阿裡巴巴推出的開源的Java處理JSON的工具庫,號稱是目前最快的JSON解析庫。版本仍在不斷升級中,勢頭很好。
對於國人出的開源作品,個人還是有些情感傾向的。從事軟件這一行10載,所用所看皆為外國貨,心中難免不爽。國內互聯網巨頭們不斷將自己的代碼開源,是一件令人振奮的事情。
所謂有捨才有得,這樣的開源事件,讓我們能夠感覺到大器與國際化。開源並得到同行認可,也彰顯其技術實力。最終的結果就是,名利雙收。
github地址:https://github.com/alibaba/fastjson
不同的場景要用不同的jar包,通常我們會下載源碼後編譯,但對於沒有編譯環境的童鞋還是很苦惱的,只少目前為止我沒有找到官方jar包下載地址。
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 accessList = new ArrayList();
accessList.add(access);
Access access2 = new Access("lincyang","12345");
accessList.add(access2);
String tmp2 = JSON.toJSONString(accessList);
System.out.println(tmp2);
List list = JSON.parseObject(tmp2,new TypeReference
3、解析網絡返回值
//weixin測試id
private static final String appId = "wxbea13caead95d9d1";
private static final String appSecret = "f518f8f5fe4dd731a6184e208bf37fe4";
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;
}
有了上面的例子,在Android上使用也是類似的。
只不過網絡操作時要有網絡權限,並在workThread中進行操作。
同樣的代碼,直接用在Android上。
@Override
protected 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 accessList = new ArrayList();
accessList.add(access);
Access access2 = new Access("lincyang","12345");
accessList.add(access2);
String tmp2 = JSON.toJSONString(accessList);
Log.d(TAG, tmp2);
List list = JSON.parseObject(tmp2,new TypeReference
最近翻看以前的某項目時,發現了一個極其常用的效果——廣告條,或者也稱不上自定義組件,但是使用頻率還是相當普遍的。 打開市面上各大A
一直以來花粉都很期待華為智能手表國行版的發布,今天下午隨著華為發布會華為watch一同發布,發布的手機新品是華為Mate8。很想知道國行華為手表多少錢?有幾
自定義View控件, 算是常見的用法. 剛接觸安卓開發的時候, 很多人習慣在不同的XML布局文件裡面Copy一大段代碼, 達到相同View不斷被使用的效果,但如果以後要改
前面幾篇文章分別討論了Activity和Service,本文就來討論BroastcastReceiver,Broastcast是應用程序間通信的手段。Broastcast