Android 关于JSON介绍
来源:互联网 发布:合肥瑶海公园知乎 编辑:程序博客网 时间:2024/05/22 12:05
JSON的定义:
一种轻量级的数据互换格局,具有杰出的可读和便于快速编写的特点。业内主流技巧为其供给了完全的解决规划(有点类似于正则表达式 ,获得了当今大项目组说话的支撑),从而可以在不合平台间进行数据互换。JSON采取兼容性很高的文本格局,同时也具备类似于C说话体系的行动。 – Json.org
JSON Vs XML
1.JSON和XML的数据可读性基****同
2.JSON和XML同样拥有雄厚的解析手段
3.JSON相对于XML来讲,数据的体积小
4.JSON与JavaScript的交互加倍便利
5.JSON对数据的描述性比XML较差
6.JSON的速度要远远快于XML
android2.3供给的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顶用到的异常
JSONObject, JSONArray来构建json文本
- // 假设如今要创建如许一个json文本
- // {
- // "phone" : ["12345678", "87654321"], // 数组
- // "name" : "yuanzhifei89", // 字符串
- // "age" : 100, // 数值
- // "address" : { "country" : "china", "province" : "jiangsu" }, // 对象
- // "married" : false // 布尔值
- // }
-
- try {
- // 起首最外层是{},是创建一个对象
- JSONObject person = new JSONObject();
- // 第一个键phone的值是数组,所以须要创建数组对象
- JSONArray phone = new JSONArray();
- phone.put("12345678").put("87654321");
- person.put("phone", phone);
-
- person.put("name", "yuanzhifei89");
- person.put("age", 100);
- // 键address的值是对象,所以又要创建一个对象
- JSONObject address = new JSONObject();
- address.put("country", "china");
- address.put("province", "jiangsu");
- person.put("address", address);
- person.put("married", false);
- } catch (JSONException ex) {
- // 键为null或应用json不支撑的数字格局(NaN, infinities)
- throw new RuntimeException(ex);
- }
getType和optType api的应用
getType可以将要获取的键的值转换为指定的类型,若是无法转换或没有值则抛出JSONException
optType也是将要获取的键的值转换为指定的类型,无法转换或没有值时返回用户供给或这默认供给的值
- try {
- // 所有应用的对象都是用上方创建的对象
- // 将第一个德律风号码转换为数值和将名字转换为数值
- phone.getLong(0);
- person.getLong("name"); // 会抛异常,因为名字无法转换为long
- phone.optLong(0); // 代码内置的默认值
- phone.optLong(0, 1000); // 用户供给的默认值
- person.optLong("name");
- person.optLong("name", 1000); // 不像上方那样抛异常,而是返回1000
- } catch (JSONException ex) {
- // 异常处理惩罚代码
- }
除了上方的两个类,还可以应用JSONStringer来构建json文本
- try {
- JSONStringer jsonText = new JSONStringer();
- // 起首是{,对象开端。object和endObject必须配对应用
- jsonText.object();
-
- jsonText.key("phone");
- // 键phone的值是数组。array和endArray必须配对应用
- jsonText.array();
- jsonText.value("12345678").value("87654321");
- jsonText.endArray();
-
- jsonText.key("name");
- jsonText.value("yuanzhifei89");
- jsonText.key("age");
- jsonText.value(100);
-
- jsonText.key("address");
- // 键address的值是对象
- jsonText.object();
- jsonText.key("country");
- jsonText.value("china");
- jsonText.key("province");
- jsonText.value("jiangsu");
- jsonText.endObject();
-
- jsonText.key("married");
- jsonText.value(false);
-
- // },对象停止
- jsonText.endObject();
- } catch (JSONException ex) {
- throw new RuntimeException(ex);
- }
json文本解析类JSONTokener
遵守RFC4627规范将json文本解析为响应的对象。
对于将json文本解析为对象,只须要用到该类的两个api:
机关函数
public Object nextValue();
- // {
- // "phone" : ["12345678", "87654321"], // 数组
- // "name" : "yuanzhifei89", // 字符串
- // "age" : 100, // 数值
- // "address" : { "country" : "china", "province" : "jiangsu" }, // 对象
- // "married" : false // 布尔值
- // }
-
- private static final String JSON =
- "{" +
- " \"phone\" : [\"12345678\", \"87654321\"]," +
- " \"name\" : \"yuanzhifei89\"," +
- " \"age\" : 100," +
- " \"address\" : { \"country\" : \"china\", \"province\" : \"jiangsu\" }," +
- " \"married\" : false," +
- "}";
-
- try {
- JSONTokener jsonParser = new JSONTokener(JSON);
- // 此时还未读取任何json文本,直接读取就是一个JSONObject对象。
- // 若是此时的读取地位在"name" : 了,那么nextValue就是"yuanzhifei89"(String)
- JSONObject person = (JSONObject) jsonParser.nextValue();
- // 接下来的就是JSON对象的操纵了
- person.getJSONArray("phone");
- person.getString("name");
- person.getInt("age");
- person.getJSONObject("address");
- person.getBoolean("married");
- } catch (JSONException ex) {
- // 异常处理惩罚代码
- }
其它的api根蒂根基就是用来查看json文本中的文本的
- try {
- JSONTokener jsonParser = new JSONTokener(JSON);
- // 持续向下读8个json文本中的字符。此时刚开端,即在{处
- jsonParser.next(8); //{ "phone。tab算一个字符
-
- // 持续向下读1个json文本中的字符
- jsonParser.next(); //"
-
- // 持续向下读取一个json文本中的字符。该字符不是空白、同时也不是注目中的字符
- jsonParser.nextClean(); //:
-
- // 返回当前的读取地位到第一次碰到""a""之间的字符串(不包含a)。
- jsonParser.nextString(""a""); // ["12345678", "87654321"], "n(前面有两个空格)
-
- // 返回当前读取地位到第一次碰到字符串中(如"0089")随便率性字符之间的字符串,同时该字符是trimmed的。(此处就是第一次碰到了89)
- jsonParser.nextTo("0089"); //me" : "yuanzhifei
-
- // 读取地位撤销一个
- jsonParser.back();
- jsonParser.next(); //i
-
- // 读取地位进步到指定字符串处(包含字符串)
- jsonParser.skipPast("address");
- jsonParser.next(8); //" : { "c
-
- // 读取地位进步到履行字符处(不包含字符)
- jsonParser.skipTo(""m"");
- jsonParser.next(8); //married"
- } catch (JSONException ex) {
- // 异常处理惩罚代码
- }
- Android 关于JSON介绍
- Android JSON 介绍
- Android:JSON介绍
- 【Android入门】JSON介绍
- Android 关于JSON封装
- Android 关于JSON解析
- Android关于JSON解析
- 关于json库的简单介绍
- Android关于JSON的处理
- 关于Android 定位的介绍
- 关于Android中 appcompat_v7 介绍
- 关于Android的基础知识介绍
- 关于Android中JSON数据的操作
- 关于android端的json传输
- android中关于Json的生成
- 介绍 JSON
- JSON 介绍
- 介绍 JSON
- J2EE学习笔记————Servlet操作数据库分页
- 做网站网页编写时应该注意的一些规范
- 0-1背包问题(动态规划入门)
- Verilog的模块与端口 语法
- linux下Redis的安装与配置
- Android 关于JSON介绍
- UVa OJ 10258 - Contest Scoreboard
- 数据缓存系统-memcached介绍
- 进程与线程
- Gnuplot 作图
- iPhone摄像头设备获取(分离简化版)
- 使用动态SQL语句 创建数据库
- 伸出双手,想要挽留,抓住的只是你唯美的借口
- Javascript跳转页面和打开新窗口等方法