探究Android系统中解析JSON数据的方式

探究Android系统中解析JSON数据的方式,第1张

概述前言喜欢在前言里讲一下自己的现状,或许能有共鸣的同学,更多的是留给自己一个纪念,几个月或者几年再回来看的时候还是会很有感慨。今天说说语言,json这种数据格式之前我做服务器端的时候天天接触,天真的以为jso

前言
喜欢在前言里讲一下自己的现状,或许能有共鸣的同学,更多的是留给自己一个纪念,几个月或者几年再回来看的时候还是会很有感慨。今天说说语言,Json这种数据格式之前我做服务器端的时候天天接触,天真的以为Json的世界里只有PHP的Json_encode和Json_decode,今天当我做客户端的时候,竟然将近一个多小时才搞定Json的解析。这里我不是抨击PHP好坏,只是想说多学点东西,看看你不熟悉的领域,方能开阔自己的视野,方能知道天外有天,方能知道当初你看不上的工作其实你也不一定能很好的完成,扯多了,回来讲解Json


什么是Json
Json(JavaScript Object Natation)是一种轻量级的数据交换格式,相比xml这种数据交换格式来说,Json相对解析更加简单一些,因此客户端和服务器的数据交换格式往往通过Json进行交换

Json一共有两种数据结构,一种是以(key/value)对形式存在的无序的JsonObject对象,一个对象以“{”(左花括号)开始,“}”(右花括号)结束。每个“名称”后跟一个“:”(冒号); “名称/值”对之间使用“,”(逗号)

例如:{”name“:"zhengyi.wzy"},这就是一个最简单的Json对象,对于这种数据格式,key值必须是String,而value则可以是String,Number,Object,Array等数据类型

另一种数据格式就是有序的value的集合,这种形式被称为是JsonArray,数组是值(value)的有序集合。一个数组以”[“(左中括号)开始,”]“(右中括号)结束。值之间使用”,“(逗号)分隔

AndroID中Json相关解析类
androID的Json解析部分都在包org.Json下,主要有以下几个类:

JsONObject
这是系统中有关JsON定义的基本单元,其包含一对(key/value)数值

它对外部(External:应用toString()方法输出的数值)调用的响应体现为一个标准的字符串(例如:{“Json”: “Hello,World”},最外被大括号包裹,其中的key和value被冒号”:”分隔)。其对于内部(Internal)行为的 *** 作格式略微,例如:初始化一个JsONObject实例,引用内部的put()方法添加数值:new JsONObject().put(“Json”,“Hello,World!”),在key和value之间是以逗号”,”分隔

value的类型包括: JsONObjects,JsONArrays,Strings,Booleans,Integers,Longs,Doubles or NulL

有两种不同的取值方式

    get():在确定key存在的条件下使用,否则当无法检索到相关key时,将会抛出一个Exception异常信息
    opt():这个方法相对比较灵活,当无法获取所指定数值时,将会返回一个默认值,并不会抛出异常(个人推荐使用这个方法)


JsONArray
它代表一组有序的数值。将其转换为String输出(toString)所表现的形式是用方括号包裹,数值以逗号”,”分隔(例如:[”Alibaba“,”BaIDu“,“Tecent”])

这个类的内部同样具有查询行为,get()和opt()两种方法都可以通过index索引返回指定的数值,put()方法用来添加或者替换数值

同样JsONArray的value类型可以包括:JsONObjects,Doubles or NulL


AndroID解析实例
客户端一般从服务器获得都是字符串,直接new一个JsONObject即可,参考程序如下

获取Json字符串
这个网址提供了Json字符串:http://API.androIDhive.info/contacts/, 我们可以开启一个线程发起http请求,获取Json字符串,参考代码如下:

  

 private String getJsonByNetwork() {     // You can get Json by this url     final String url = "http://API.androIDhive.info/contacts/";     DefaulthttpClIEnt httpClIEnt = new DefaulthttpClIEnt();     httpGet httpGet = new httpGet(url);        inputStream inputStream = null;     String result = null;        try {       httpResponse response = httpClIEnt.execute(httpGet);       inputStream = response.getEntity().getContent();          // Json is UTF-8 by default       BufferedReader reader = new BufferedReader(new inputStreamReader(           inputStream,"UTF-8"));       StringBuilder sb = new StringBuilder();       String tmp = null;          while ((tmp = reader.readline()) != null) {         sb.append(tmp);       }          result = sb.toString();     } catch (Exception e) {       try {         if (inputStream != null) {           inputStream.close();         }       } catch (IOException se) {       }     }        return result;   } 

解析Json字符串
解析Json字符串的步骤一般如下所示:

(1) 创建JsONObject:

  // Create a JsONObject   JsONObject JsonObject = new JsONObject(result); 


(2) 获取JsONArray,遍历JsONArray数组

  // To get a specific JsONArray   JsONArray JsonArray = JsonObject.getJsONArray("contacts");      // To get items from the array   for (int i = 0; i < JsonArray.length(); i ++) {     // Todo:Traverse the Jsonarray   } 


(3) 获取JsONObject

  // Create a JsONObject   JsONObject JsonObject = new JsONObject(result);      // To get a specific JsONArray   JsONArray JsonArray = JsonObject.getJsONArray("contacts");      // To get items from the array   for (int i = 0; i < JsonArray.length(); i++) {     // To get a specific JsONObject     JsONObject oneObject = JsonArray.getJsONObject(i);   } 


(4)获取特定字符串

  // Create a JsONObject   JsONObject JsonObject = new JsONObject(result);      // To get a specific JsONArray   JsONArray JsonArray = JsonObject.getJsONArray("contacts");      // To get items from the array   for (int i = 0; i < JsonArray.length(); i++) {     // To get a specific JsONObject     JsONObject oneObject = JsonArray.getJsONObject(i);        // To get a specific string     String ID = oneObject.getString("ID");     String name = oneObject.getString("name");        Log.e("wzy","ID is:" + ID + ",name is " + name);   } 


解析结果:

  03-05 10:26:08.690: E/wzy(26401): ID is:c200,name is ravi Tamada   03-05 10:26:08.690: E/wzy(26401): ID is:c201,name is Johnny Depp   03-05 10:26:08.690: E/wzy(26401): ID is:c202,name is Leonardo Dicaprio   03-05 10:26:08.690: E/wzy(26401): ID is:c203,name is John Wayne   03-05 10:26:08.691: E/wzy(26401): ID is:c204,name is Angelina JolIE   03-05 10:26:08.691: E/wzy(26401): ID is:c205,name is DIDo   03-05 10:26:08.691: E/wzy(26401): ID is:c206,name is Adele   03-05 10:26:08.692: E/wzy(26401): ID is:c207,name is Hugh Jackman   03-05 10:26:08.693: E/wzy(26401): ID is:c208,name is Will Smith   03-05 10:26:08.693: E/wzy(26401): ID is:c209,name is Clint Eastwood   03-05 10:26:08.694: E/wzy(26401): ID is:c2010,name is Barack Obama   03-05 10:26:08.694: E/wzy(26401): ID is:c2011,name is Kate Winslet   03-05 10:26:08.695: E/wzy(26401): ID is:c2012,name is Eminem 

总结

以上是内存溢出为你收集整理的探究Android系统中解析JSON数据的方式全部内容,希望文章能够帮你解决探究Android系统中解析JSON数据的方式所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1141400.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存