android开发笔记之Json解析
2016-05-23 23:50
459 查看
在上篇文章中我们提到在Android开发中经常用到xml文件,当然跟服务器打交道,大部分还是喜欢用Json数据。
Json的定义:
一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性。
JSON Vs XML
1.JSON和XML的数据可读性基本相同
2.JSON和XML同样拥有丰富的解析手段
3.JSON相对于XML来讲,数据的体积小
4.JSON与JavaScript的交互更加方便
5.JSON对数据的描述性比XML较差
6.JSON的速度要远远快于XML
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数据:
其实大家看到这个Json数据应该不难,因为看起来就觉得不是很难嘛,对的,那我来给大家个诀窍:
①见到大括号 {} 就转成 JSONObject
②见到中括号 [] 就转成 JSONArray
③JSONObject 获得值使用 getType(key) type为Booeal 、Int 、String …..
④JSONArray 获得值要使用下标
那就来写写:
解析有两种方式都可以:使用 JSONObect 和 使用 JSONToken
布局文件:
activity_main.xml
MainActivity.java
效果:
看看是不是很简单呢,赶紧试试
**注:
JSON数据的格式不要写错了,注意中英输入法,尤其是标点,不然解析不出来的哦。**
Json的定义:
一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性。
JSON Vs XML
1.JSON和XML的数据可读性基本相同
2.JSON和XML同样拥有丰富的解析手段
3.JSON相对于XML来讲,数据的体积小
4.JSON与JavaScript的交互更加方便
5.JSON对数据的描述性比XML较差
6.JSON的速度要远远快于XML
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数据:
{ name:张三, age:26, phone:[131,132], score:{语文:100,数学:60,理综:{化学:120,物理:150}} }
其实大家看到这个Json数据应该不难,因为看起来就觉得不是很难嘛,对的,那我来给大家个诀窍:
①见到大括号 {} 就转成 JSONObject
②见到中括号 [] 就转成 JSONArray
③JSONObject 获得值使用 getType(key) type为Booeal 、Int 、String …..
④JSONArray 获得值要使用下标
那就来写写:
解析有两种方式都可以:使用 JSONObect 和 使用 JSONToken
布局文件:
activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.example.json.MainActivity" > <Button android:text="json解析" android:onClick="btn" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@+id/tv" android:layout_width="wrap_content" android:layout_height="wrap_content"/> </LinearLayout>
MainActivity.java
public class MainActivity extends Activity { private TextView tv; //JSON数据 public static final String JSONDATA = "{name:张三 ,age:26,phone:[131,132],score:{语文:100,数学:60,理综:{化学:120,物理:150}}}"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tv = (TextView) findViewById(R.id.tv); } public void btn(View view) { try { StringBuffer stringBuffer = new StringBuffer(); //解析有两种方式:JSONObject和JSONToken //第一种方式 //最外层的JSONObject // JSONObject jsonObject = new JSONObject(JSONDATA); //第二种方式 //1.最外层的JSONObject JSONTokener jsonTokener = new JSONTokener(JSONDATA); JSONObject jsonObject = (JSONObject) jsonTokener.nextValue(); //取值 stringBuffer.append("name" + jsonObject.getString("name") + "\n"); stringBuffer.append("age" + jsonObject.getString("age") + "\n"); //2.phone那个JSONArray JSONArray phoneArray = jsonObject.getJSONArray("phone"); //取值 stringBuffer.append("phone" + phoneArray.getString(0) + " " + phoneArray.getString(1) + "\n"); //3.score那个JSONObject JSONObject scoreObject = jsonObject.getJSONObject("score"); //取值 stringBuffer.append("语文" + scoreObject.getString("语文") + " " + "数学" + scoreObject.getString("数学") + " "); //4.理综那个JSONObject JSONObject lizongObject = scoreObject.getJSONObject("理综"); //取值 stringBuffer.append("化学" + lizongObject.getString("化学") + " " + "物理" + lizongObject.getString("物理") + "\n"); //将解析的数据显示到TextView上 tv.setText(stringBuffer.toString()); } catch (JSONException e) { e.printStackTrace(); } } }
效果:
看看是不是很简单呢,赶紧试试
**注:
JSON数据的格式不要写错了,注意中英输入法,尤其是标点,不然解析不出来的哦。**
相关文章推荐
- Android三级图片缓存
- [Android]Android开源工具项目集合20160523
- 关于handler机制(结合源码及方法的调用去总结)
- android源码解析(二十七)-->HOME事件流程
- 第一个Android crackme(2016-05)
- Android-architecture之MVC、MVP、MVVM、Data-Binding
- Android RxJava使用介绍(一)概念
- android studio 2.0 导入工程
- android中的各类权限
- viewHolder工具类
- 详解-Android各种提示框
- Android必需了解的东西
- android插入SQLite中文乱码问题
- Android Architecture(Is Activity God?)
- Android点击两次back退出程序的两种方法
- Android中的事件分发机制
- Android Studio安装以及部分说明
- 自定义ViewPager Indicator
- Android在界面中随意移动一个图片
- Android开发,使用Wifi调试真机