Android JSON 解析
来源:互联网 发布:我的世界起床战争端口 编辑:程序博客网 时间:2024/05/16 06:04
json
JavaScript 对象表示法(JavaScript Object Notation)。独立于语言和平台,
比 XML 更小、更快,更易解析。如今JSON数据已经成为了互联网中大多数数据的传递方式,所以必须要熟练掌握。
JSON格式详解
JSON有三种结构
1. JSON对象
JSON对象简单而言便是键值对或名值对,而“值”可以是数值、字符串和布尔类型等。
1. JSON 数值
单个数值{“value”:12} 多个数值{"maxValue":24, "minValue":12};
- JSON 字符串 字符串需要加引号,键值对之间使用”,”。
{"name":"y874961524"} {"name":"y874961524", "blog":"http://blog.csdn.net/y874961524"}
- JSON 布尔 请注意JSON格式中的值可以使用布尔类型,且不需要加引号,如果true或false被引号包裹,那么便解析为JSON字符串,请处理稍有不同。
{"success":false}
2. JSON数组
JSON数组的表达方法和C语言数组的表达方法完全相同。
下面的例子中存在一个JSON对象,该JSON对象只有一个键值对,键为lists而键值为JSON数组——[5,6,7,8]。
这里已经存在JSON类型的嵌套,具体请看下面一个例子。
{“lists”:[5,6,7,8]}
3. JSON对象和数组锲套
JSON格式可以嵌套,所谓嵌套便是JSON对象中可包括JSON数组,JSON数组中可包括JSON对象。下面的例子中rows为JSON对象,
对象中嵌套JSON数组,每一个JSON数组的元素又是一个JSON对象。这种嵌套情况在实际情况中经常出现。
{ "total": 3, "rows": [ { "title": "树莓派学习笔记——索引博文", "url": "http://blog.csdn.net/xukai871105/article/details/23115627" }, { "title": "树莓派学习笔记——GPIO功能学习", "url": "http://blog.csdn.net/xukai871105/article/details/12684617" }, { "title": "物联网学习笔记——索引博文", "url": "http://blog.csdn.net/xukai871105/article/details/23366187" } ] };
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。
JSONArray
它代表一组有序的数值。
将其转换为String输出(toString)所表现的形式是用方括号包裹,
数值以逗号”,”分隔(例如:[value1,value2,value3],
大家可以亲自利用简短的代码更加直观的了解其格式)。
这个类的内部同样具有查询行为,get()和opt()两种方法都可以通过index索引返回指定的数值,put()方法用来添加或者替换数值。
同样这个类的value类型可以包括:Boolean、JSONArray、JSONObject、Number、String或者默认值JSONObject.NULL object。
JSONTokener
json解析类
JSONException
json中用到的异常
解析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}
Android解析JSON示例
public class MainActivity extends ActionBarActivity { private TextView mTvText; private TextView mTvRes; private String jsonStr; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mTvText = (TextView) findViewById(R.id.id_tv_text); mTvRes = (TextView) findViewById(R.id.id_tv_result); File f = new File("sdcard/DownLoad/json.txt"); try { // 读取json数据,并指定编码(在inputStreamReader中设置编码) BufferedReader br = new BufferedReader(new InputStreamReader( new FileInputStream(f), "GB2312")); jsonStr = br.readLine(); mTvText.setText("json: " + jsonStr); br.close(); // 进行json解析 JSONObject jsonObj = new JSONObject(jsonStr); JSONArray jsonArr = jsonObj.getJSONArray("result"); // 获取JSON数组中的第一个JSON对象 JSONObject resObj = jsonArr.getJSONObject(0); StringBuilder sb = new StringBuilder("解析后的部分JSON数据\n"); // 只取出部分数据用作测试 sb.append("城市 : " + resObj.getString("city") + "\n"); sb.append("质量 : " + resObj.getString("quality") + "\n"); sb.append("时间 : " + resObj.getString("time") + "\n"); mTvRes.setText(sb.toString()); } catch (Exception e) { mTvText.setText(e.getMessage()); e.printStackTrace(); } }}
- 【json】android json解析
- Android-Android解析JSON
- Android数据解析:Json解析
- android---Json数据解析
- Android Json 数据解析
- android 解析JSON
- android 解析json数据格式
- android 解析json数据格式
- Android 解析json数据格式
- android 解析json数据格式
- android 解析json数据格式
- Android的JSON解析
- Android 解析Json
- android JSON 解析
- Android 解析json数据格式
- android解析Json
- Android解析json数据
- Android Json解析
- 5-28 猴子选大王 (20分)
- apk调试安装过程中logcat显示Activity不存在的问题
- 5-29 删除字符串中的子串 (20分)
- STM32L1标准固件库使用
- C++中的string用法
- Android JSON 解析
- 产生一个固定大小、禁止最大化、最小化的qquickview窗口
- 5-30 字符串的冒泡排序 (20分)
- 学习篇---刮刮卡
- 具有弹性效果的ListView
- 5-31 字符串循环左移 (20分)
- arraylist转array数组
- Leetcode no. 217
- js动态创建按钮