相关文章推荐
帅气的弓箭  ·  Jackson·  1 月前    · 
精明的蘑菇  ·  TypeError:“datetime.da ...·  1 年前    · 
乐观的蚂蚁  ·  java - Jetty ...·  1 年前    · 

相信大家肯定对 Json 不陌生吧,我们和服务器交互一般用得较多的数据传递方式都是 Json 字符串的形式, 保存对象,我们也可以写成一个 Json 字符串然后存储!解析 Json 不知道你用的是 Gson,Fastjson,jackson 等,不过本节我们并不会去用这些第三方的解析库,而是使用 Android 自带的 Json 解析器来解析 Json! 好的,开始本节内容!

1.Json概念以及与XML的比较

1)Json是什么?

答:JavaScript Object Natation, 一种轻量级的数据交换格式, 与XML一样, 广泛被采用的客户端和服务端交互的解决方案!具有良好的可读和便于快速编写的特性。

2)Json与XML的比较

  • JSON和XML的数据可读性基本相同;
  • JSON和XML同样拥有丰富的解析手段
  • JSON相对于XML来讲,数据的体积小
  • JSON与JavaScript的交互更加方便
  • JSON对数据的描述性比XML较差
  • JSON的速度要远远快于XML
  • PS:上述来自于百度~简单点说Json的优点:体积小,节省流量,只是不如XML直观,可读性 稍微差一点而已!

    3)Json的格式规范

    就像协议一样,肯定是有一套规范的,毕竟双方都是通过Json字符串来传递数据,语法规则如下: 数据在名称/值对中 数据由逗号分隔 花括号保存对象 方括号保存数组 ; 而Json数据的书写格式: 名称/值对 比如: "person":"coder-pig" 比如一个简单的Json字符串:

    { "id":"1","name":"基神","age":"18" }, { "id":"2","name":"B神","age":"18" }, { "id":"3","name":"曹神","age":"18" }

    我们除了解析Json还可以自己拼接Json,当然如果你自己拼了一个Json字符串又不知道对不对, 可以百度随便找一个校验工具,比如: http://www.runoob.com/jsontool 把Json字符串贴上去,校验下就好!

    2.Android给我们提供的Json解析类

    这些API都存在于org.json包下,而我们用到的类有下面这些:

  • JSONObject : Json对象,可以完成Json字符串与Java对象的相互转换
  • JSONArray : Json数组,可以完成Json字符串与Java集合或对象的相互转换
  • JSONStringer : Json文本构建类,这个类可以帮助快速和便捷的创建JSON text, 每个JSONStringer实体只能对应创建一个JSON text
  • JSONTokener :Json解析类
  • JSONException :Json异常
  • JSONArray jsonArray = new JSONArray(json); for(int i = 0;i < jsonArray.length();i++){ JSONObject jsonObject = (JSONObject) jsonArray.get(i); Person person = new Person(); person.setId(i+""); person.setName(jsonObject.getString("name")); person.setAge(jsonObject.getString("age")); persons.add(person); }catch (Exception e){e.printStackTrace();}

    运行效果图

    嘿嘿,很简单是吧,接下来我们找一个复杂点的!

    2)复杂的Json字符串解析示例:

    如果是这样的Json字符串呢?

    呵呵,那就需要我们一步步来扣数据了:

    解析代码如下

    private void parseDiffJson(String json) { try { JSONObject jsonObject1 = new JSONObject(json); Log.e("Json", json); JSONArray jsonArray = jsonObject1.getJSONArray("ch"); for (int i = 0; i < jsonArray.length(); i++) { JSONObject jsonObject = (JSONObject) jsonArray.get(i); //取出name String sname = jsonObject.getString("names"); JSONArray jarray1 = jsonObject.getJSONArray("data"); JSONArray jarray2 = jsonObject.getJSONArray("times"); Log.e("Json", sname); Log.e("Json", jarray1.toString()); Log.e("Json", jarray2.toString()); } catch (Exception e) { e.printStackTrace();

    看下打印的Log :

    当然还有一层,有兴趣你就自己扣...

    本节小结:

    好的,使用Android给我们提供的扣脚Json解析类果然要慢慢扣,当然你也可以将解析的过程 反过来,自己拼接JSON,时间关系,这里就慢慢拼接了,哈哈,当然进阶部分我们 学习了第三方的一些Json解析库就轻松多了,~好的,本节就到这里,谢谢~