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。。其最大的优点在于可以减少由于格式的错误导致程序异常,引用这个类可以自动严格按照JSON语法规则(syntax rules)创建JSON text。每个JSONStringer实体只能对应创建一个JSON text。
JSONArray: 它代表一组有序的数值。将其转换为String输出(toString)所表现的形式是用方括号包裹,数值以逗号”,”分隔(例如:[value1,value2,value3],大家可以亲自利用简短的代码更加直观的了解其格式)。这个类的内部同样具有查询行为,get()和opt()两种方法都可以通过index索引返回指定的数值,put()方法用来添加或者替换数值。同样这个类的value类型可以包括:Boolean、JSONArray、JSONObject、Number、String或者默认值JSONObject.NULL object。
JSONTokener: json解析类
JSONException: json中用到的异常
JSON示例:
{ /*JSONObject*/
"resultcode": "200",
"reason": "SUCCESSED!",
"result": [ /*JSONArray*/
{ /*JSONObject*/
"city": "苏州", /*城市*/
"PM2.5": "73", /*PM2.5指数*/
"AQI": "98", /*空气质量指数*/
"quality": "良", /*空气质量*/
"PM10": "50",/*PM10*/
"CO": "0.79", /*一氧化碳*/
"NO2": "65", /*二氧化氮*/
"O3": "28", /*臭氧*/
"SO2": "41", /*二氧化硫*/
"time": "2014-12-26 11:48:40"/*更新时间*/
}
],
"error_code": 0
}
把以上文本存到text.json,放到asserts文件夹底下
1.读取:
public String getFromAssets(String fileName){
try {
String Result="";
InputStream in = getResources().getAssets().open(fileName);
//获取文件的字节数
int lenght = in.available();
//创建byte数组
byte[] buffer = new byte[lenght];
//将文件中的数据读到byte数组中
in.read(buffer);
//转码
Result=new String(buffer,"GB2312");
return Result;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
2.解码:
String result = getFromAssets("text.json");
try {
JSONObject jsonObject = new JSONObject(result);
int resultCode = jsonObject.getInt("resultcode");
if(resultCode == 200)
{
JSONArray jsonArray = jsonObject.getJSONArray("result");
JSONObject resultJsonObject = jsonArray.getJSONObject(0);
String city = resultJsonObject.optString("city","utf-8");
String pm25 = resultJsonObject.getString("PM2.5");
String aqi = resultJsonObject.getString("AQI");
String quality = resultJsonObject.getString("quality");
String pm10 = resultJsonObject.getString("PM10");
String co = resultJsonObject.getString("CO");
String no2 = resultJsonObject.getString("NO2");
String o3 = resultJsonObject.getString("O3");
String so2 = resultJsonObject.getString("SO2");
String time = resultJsonObject.getString("time");
Log.e("JSON","city = "+city+",pm25 = "+pm25+",aqi = "+aqi+",quality = "+quality+",pm10 = "+pm10+
",co = "+co+",no2 = "+no2+",o3 = "+o3+",so2 = "+so2+",time = "+time);
}
} catch (JSONException e) {
Log.e("JSON","e = "+e.getMessage());
e.printStackTrace();
}