Android——Json解析
来源:互联网 发布:美国数据网站 编辑:程序博客网 时间:2024/05/01 21:10
1.Json概念以及与XML的比较
1)Json是什么?
答:JavaScript Object Natation, 一种轻量级的数据交换格式, 与XML一样, 广泛被采用的客户端和服务端交互的解决方案!具有良好的可读和便于快速编写的特性。
2)Json与XML的比较:
- JSON和XML的数据可读性基本相同;
- JSON和XML同样拥有丰富的解析手段
- JSON相对于XML来讲,数据的体积小
- JSON与JavaScript的交互更加方便
- JSON对数据的描述性比XML较差
- JSON的速度要远远快于XML
3)Json的格式规范:
JSON建构于两种结构:
1. “名称/值”对的集合(A collection of name/value pairs)。不同的语言中,它被理解为对象(object),记录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)。
2. 值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array)。
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异常
3.代码示例:解析Json字符串:
1)第一种结构解析——简单的Json字符串解析示例:
[ { "id":"1","name":"A","age":"18" }, { "id":"2","name":"B","age":"18" }, { "id":"3","name":"C","age":"18" }]
我们解析的是上面这个简单的Json,首先我们来写一个POJO类:
Person.java:
public class Person { private String id; private String name; private String age; public void setId(String id){ this.id = id; } public String getId(){ return this.id; } public void setName(String name){ this.name = name; } public String getName(){ return this.name; } public void setAge(String age){ this.age = age; } public String getAge(){ return this.age; } @Override public String toString() { return this.name + "~年方:" + this.age; }}
写一个解析上述Json字符串的方法:
private void parseEasyJson(String json){ persons = new ArrayList<Person>(); try{ 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字符串解析示例:
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:
0 0
- android——json解析
- Android——Json解析
- Android解析JSON数据(一)——JSON解析
- Android——JSON数据解析详解
- Android——JSON解析数据
- Android解析数据—JSON格式数据
- Android 解析JSON数据——认识JSON
- json——Android Gson解析json详解
- json——android提供的json解析类
- Android解析——json解析为javabean
- Android解析JSON数据(二)——GSON解析
- Android解析JSON数据(三)——FastJson解析
- 【json】android json解析
- android Json解析——揭开json解析的神秘面纱
- Android-Android解析JSON
- android 学习笔记5——get请求+json解析
- Android网络通讯——JSON,GSON解析网络数据
- Android基础笔记——JSONObject方式解析JSON数据
- 第3章 主机规划与磁盘分区
- ContentType设置的内容
- GCD死锁
- 关于android开机速度性能方面
- maven学习笔记-基础
- Android——Json解析
- 剑指offer——二叉树的下一个节点
- HDFS详解
- qemu-kvm部分流程/源代码分析
- BZOJ2276: [Poi2011]Temperature
- 剑指offer 面试题23:从上往下打印二叉树(二叉树的层次遍历BFS) 题解
- 越狱相关一:注意事项
- ListView中的onItemClick无法被响应
- 【android】git常用命令合集