Json数据获取以及解析入门
来源:互联网 发布:网络借贷平台风险 编辑:程序博客网 时间:2024/06/09 23:21
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中用到的异常
{ "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数据中需要的端点进行解析就可以了,不需要所谓的从头到尾从上到下的一级一级滴进行解析。我一开始研究就进入了那个误区,着实很坑爹。希望对大家有所些些帮助吧!
- Json数据获取以及解析入门
- JSON数据解析入门
- 获取解析JSON数据
- Java从网络中请求获取JSon数据以及解析JSON数据----(自创,请注明)
- fetch获取解析json数据
- 解析获取的Json数据
- json 格式,以及json数据获取
- AFN 获取数据,数据解析:JSON 介绍
- html中通过js获取接口JSON格式数据解析以及跨域问题
- html中通过js获取接口JSON格式数据解析以及跨域问题
- JavaWeb将数据包装成JSON以及JSP通过ajax对JSON的获取与解析(代码实例)
- JavaWeb将数据包装成JSON以及JSP通过ajax对JSON的获取与解析(代码实例)
- Json格式解析(数据获取)
- HttpClient获取并解析JSON数据
- 用JQuery解析获取JSON数据
- Http获取Json数据,并用Gson解析
- 用JQuery解析获取JSON数据
- Android HttpURLConnection数据获取并JSON解析
- DropDownList 下拉列表显示
- iOS 点击Application icon加载推送通知Data
- vs2012的安装(cocos2d-x)
- 每天上下班之前读一遍,直到铭记在心……
- XML导出word
- Json数据获取以及解析入门
- ORA-00119,ORA-00132错误解决案例(10G和11G Linux/unix/aix/windows下)
- 删除手机自带软件后丢失照片怎么恢复
- 在服务器端判断request来自Ajax请求(异步)还是传统请求(同步)
- 我们不必为平凡悲叹,因为平凡也是一种美丽
- 管理系统联系人之补充
- Android 一个简单的登陆窗口的实现(文件的保存与读取)
- IOS工程自动打包并发布脚本实现
- linux yum 安装mysql