您的位置:首页 > Web前端 > JavaScript

Gson解析json数据

2013-03-13 11:31 423 查看
1.从服务端获取的json数据,经由gson反序列化后,ui显示出来

public void getJsonData() {
JsonDataGetApi api = new JsonDataGetApi();
JSONArray jArr;
JSONObject jobj;
try {
//调用GetAccountData方法
jArr = api.getArray("GetAccountData");
//从返回的Account Array中取出第一个数据
jobj = jArr.getJSONObject(0);

GsonBuilder gsonb = new GsonBuilder();
//Json中的日期表达方式没有办法直接转换成我们的Date类型, 因此需要单独注册一个Date的反序列化类.
DateDeserializer ds = new DateDeserializer();
//给GsonBuilder方法单独指定Date类型的反序列化方法
gsonb.registerTypeAdapter(Date.class, ds);

Gson gson = gsonb.create();

Account account = gson.fromJson(jobj.toString(), Account.class);

Log.d("LOG_CAT", jobj.toString());
((TextView) findViewById(R.id.Name)).setText(account.Name);
((TextView) findViewById(R.id.Age)).setText(String.valueOf(account.Age));
((TextView) findViewById(R.id.Birthday)).setText(account.Birthday
.toGMTString());
((TextView) findViewById(R.id.Address)).setText(account.Address);

} catch (Exception e) {
Toast.makeText(getApplicationContext(), e.getMessage(),
Toast.LENGTH_LONG).show();
e.printStackTrace();
}
}


Json是一种类似于XML的通用数据交换格式,具有比XML更高的传输效率.
从结构上看,所有的数据(data)最终都可以分解成三种类型:
第一种类型是标量(scalar),也就是一个单独的字符串(string)或数字(numbers),比如"北京"这个单独的词。
第二种类型是序列(sequence),也就是若干个相关的数据按照一定顺序并列在一起,又叫做数组(array)或列表(List),比如"北京,上海"。
第三种类型是映射(mapping),也就是一个名/值对(Name/value),即数据有一个名称,还有一个与之相对应的值,这又称作散列(hash)或字典(dictionary),比如"首都:北京"。
Json的规格非常简单,只用一个页面几百个字就能说清楚,而且Douglas Crockford声称这个规格永远不必升级,因为该规定的都规定了。
1) 并列的数据之间用逗号(",")分隔。
2) 映射用冒号(":")表示。
3) 并列数据的集合(数组)用方括号("[]")表示。
4) 映射的集合(对象)用大括号("{}")表示。

普通形式的:
服务器端返回的json数据格式如下:

{"userbean":{"Uid":"100196","Showname":"\u75af\u72c2\u7684\u7334\u5b50","Avtar":null,"State":1}}

带数组形式的:
服务器端返回的数据格式为:

{"calendar":
{"calendarlist":
[
{"calendar_id":"1705","title":"(\u4eb2\u5b50)ddssd","category_name":"\u9ed8\u8ba4\u5206\u7c7b","showtime":"1288927800","endshowtime":"1288931400","allDay":false},
{"calendar_id":"1706","title":"(\u65c5\u884c)","category_name":"\u9ed8\u8ba4\u5206\u7c7b","showtime":"1288933200","endshowtime":"1288936800","allDay":false}
]
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: