Json数据获取以及解析入门

来源:互联网 发布:网络借贷平台风险 编辑:程序博客网 时间:2024/06/09 23:21

        Json数据的获取和解析之前很早就实现了,但是一直没有时间做总结,今天刚好有这个时间了。所以做一下总结。

      

        首先,android的json解析部分都在包org.json下,主要有以下几个类: 

JSONObject:可以看作是一个json对象,这是系统中有关JSON定义的基本单元,其包含一对儿(Key/Value)数值。它对外部(External:   应用toString()方法输出的数值)调用的响应体现为一个标准的字符串(例如:{"JSON": "Hello, World"},最外被大括号包裹,其中的KeyValue被冒号":"分隔)。其对于内部(Internal)行为的操作格式略微,例如:初始化一个JSONObject实例,引用内部的put()方法添加数值:new JSONObject().put("JSON", "Hello, World!"),在KeyValue之间是以逗号","分隔。Value的类型包括:BooleanJSONArrayJSONObjectNumberString或者默认值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数据是什么样子的:
 {    "cityList": [        {            "lev": 1,            "id": "7",            "zoom": 8,            "lat": 25.22,            "lng": 116.75,            "message": "龙岩市水文局2013年07月14日00时发布洪水蓝色预警"        },             {            "lev": 1,            "id": "8",            "zoom": 8,            "lat": 26.38,            "lng": 117.39,            "message": "三明市水文局2013年07月14日08时发布洪水蓝色预警"        }    ],    "stcdList": [        {            "lev": 1,            "cityId": "8",            "message": "尤溪大桥2013年07月14日08时发布洪水蓝色预警(已解除)",            "stnm": "尤溪大桥",            "id": "144",            "isRelease": 1,            "content": "三布洪水蓝色预警。预计来0.5-1小时最高水位将达105.4m左右,超警戒0.9m,请有关部门注意防范。",            "lng": 118.198,            "lat": 26.184,            "isFlash": 0        },           {            "lev": 1,            "cityId": "9",            "message": "浦城2013年06月29日11时发布洪水蓝色预警(已解除)",            "stnm": "浦城",            "id": "140",            "isRelease": 1,            "content": "06月29日11时发布洪水蓝色预警。预计浦城站2013年6月29日20时洪峰水位226.0~226.2m,超警戒1.0~1.2m。",            "lng": 118.534,            "lat": 27.918,            "isFlash": 0        },        {            "lev": 1,            "cityId": "9",            "message": "2013年06月29日10时发布洪水蓝色预警(已解除)",            "stnm": "水蓝山",            "id": "139",            "isRelease": 1,            "content": "发布洪水蓝色预警。预计建溪上站2013年6月29日11时洪峰水位202.1~202.3m,超警戒0.1~0.3m。",            "lng": 118.032,            "lat": 27.752,            "isFlash": 0        }    ]}


         那么,接下来就直接上代码吧,发现时间久了,有点知识点竟然忘记了。
      
import java.util.ArrayList;import org.apache.http.HttpResponse;import org.apache.http.client.methods.HttpGet;import org.apache.http.impl.client.DefaultHttpClient;import org.apache.http.util.EntityUtils;import org.json.JSONArray;import org.json.JSONObject;public class JsonParse {public ArrayList<Double> lat = new ArrayList<Double>();// 北纬public ArrayList<Double> lng = new ArrayList<Double>();// 东经public ArrayList<Integer> lev = new ArrayList<Integer>();// 预警等级public ArrayList<String> stnm = new ArrayList<String>();// 站名public ArrayList<String> content = new ArrayList<String>();// 预警内容public ArrayList<Integer> isRelease = new ArrayList<Integer>();// 是否解除,1为是public void JsonParser() {try {// 获取Json数据String url = "http://www.fjsw.gov.cn/webPages/hsyjsys/json_hsyjHistory.aspx";JSONObject jsonObject;jsonObject = doGet(url);// 解析Json数据JSONArray jsonArray = jsonObject.getJSONArray("stcdList");for (int i = 0; i < jsonArray.length(); i++) {JSONObject json = (JSONObject) jsonArray.opt(i);lat.add(json.getDouble("lat"));lng.add(json.getDouble("lng"));lev.add(json.getInt("lev"));stnm.add(json.getString("stnm"));isRelease.add(json.getInt("isRelease"));content.add(json.getString("content")); Log.i("JSONParse-->", "lat :" + json.getDouble("lat")); Log.i("JSONParse-->", "lng :" + json.getDouble("lng")); Log.i("JSONParse-->", "lev :" + json.getInt("lev")); Log.i("JSONParse-->", "stnm :" + json.getString("stnm"));}} catch (Exception e) {// TODO: handle exception}}public static JSONObject doGet(String url) {try {String result = null;DefaultHttpClient httpClient = new DefaultHttpClient();HttpGet request = new HttpGet(url);HttpResponse response = httpClient.execute(request);result = EntityUtils.toString(response.getEntity());JSONObject object = new JSONObject(result);// Log.i("HttpActivity", result);return object;} catch (Exception e) {// TODO: handle exception}return null;}}
代码很简单,其中通过http去获取url的json数据之后,直接对json数据中需要的端点进行解析就可以了,不需要所谓的从头到尾从上到下的一级一级滴进行解析。我一开始研究就进入了那个误区,着实很坑爹。希望对大家有所些些帮助吧!

0 0
原创粉丝点击