1、json格式

2、json解析
3、gson解析
4、fastjson解析
一、Json格式
json一种轻量级的数据交换格式。在网络上传输交换数据一般用xml, json。
两种结构:
1)对象(key-value集合)
 {"id":"1001","name":"zhangshan","address":"shanghai"}
2)数组(数组对象),以[  ] 包括的key-value对象

{"students":[{"sid":1001,"name":"zhangsan","addr":"Yichang","pic":"111.jpg"},                                             {"sid":1002,"name":"Jack","addr":"Beijing","pic":"222.jpg"}]}

或:

{[{"sid":1001,"name":"zhangsan","addr":"Yichang","pic":"111.jpg"},                                             {"sid":1002,"name":"Jack","addr":"Beijing","pic":"222.jpg"}]}

 
二、json数据生成,解析
JSONObject,代表了一个JSON对象,可以完成Java对象与JSON字符串之间的相互转换。
JSONArray,代表一个JSON数组,可以完成Java集合(集合元素可以是对象)与JSON字符串之间的转换。
 
1、Java对象与JSON字符串相互转换
方式一:

Student stu = new Student(1005,"张三","Wuhan","zs.jpg");

JSONObject jsonObject = new JSONObject(stu);

 
                  jsonObject.toString()就是字符串输出: {"sid":1005,"name":"张三","addr":"Wuhan","pic":"zs.jpg"}
 
解析为对象:

JSONObject jsonObject = new JSONObject(str);

Iterator<String> iterator = jsonObject.keys();

Student stu = new Student();

while(iterator.hasNext()){

//可以利用java反射,写泛型方法

String key = iterator.next();

if(key.equals("sid")){

stu.setSid(jsonObject.getInt(key));

}

if(key.equals("name")){

stu.setName(jsonObject.getString(key));

}

if(key.equals("sid")){

stu.setAddr(jsonObject.getString(key));

}

if(key.equals("sid")){

stu.setPic(jsonObject.getString(key));

}

}

 
方式二:
                           Student stu = new Student(1005, "张三", "Wuhan", "zs.jpg");

JSONObject jsonObject = new JSONObject();

jsonObject.put("zs", stu);

同样jsonObject.toString()就是字符串输出 {"zs":"{sid:1005, name:张三, addr:Wuhan, pic:zs.jpg}"}。要注意,如果Student没有覆写toString()方法,输入的是:{"zs":"org.itair.domain.Student@2666e815"}

2、集合与JSON字符串相互转换
方式一、
转换:

Student s1 = new Student(1001,"zhangsan","yichang","111");

Student s2 = new Student(1002,"Jack","Beijing","222");

List<Student> stus = new ArrayList<Student>();

stus.add(s1);

stus.add(s2);

JSONArray array = new JSONArray(stus);

array的字符串是:[{"sid":1001,"name":"zhangsan","addr":"yichang","pic":"111"},{"sid":1002,"name":"Jack","addr":"Beijing","pic":"222"}]

 
解析:
                           JSONArray jsonArray = new JSONArray("要解析的json字符串");
 

for (int i = 0; i < jsonArray.length(); i++) {

JSONObject jsonObject2 = jsonArray.getJSONObject(i);

//解析成特定的对象操作,new对象,从jsonObject2取出值来装进去

Iterator<String> iterator = jsonObject2.keys();

while (iterator.hasNext()) {

String key = iterator.next();

Object value = jsonObject2.get(key);

map.put(key, value);

}

}

 
方式二、
转换:
  Student s1 = new Student(1001,"zhangsan","yichang","111");

Student s2 = new Student(1002,"Jack","Beijing","222");

List<Student> stus = new ArrayList<Student>();

stus.add(s1);

stus.add(s2);

JSONObject jsonObject = new JSONObject();

jsonObject.put("students", stus);

jsonObject的字符串:{"students":[{"sid":1001,"name":"zhangsan","addr":"yichang","pic":"111"},{"sid":1002,"name":"Jack","addr":"Beijing","pic":"222"}]}

 
解析:
       由于上面的转换方式是把集合对象放到 JSONObject中。
       
  JSONObject jsonObject = new JSONObject("要解析的json字符串");

JSONArray jsonArray = jsonObject.getJSONArray("key");//key就是上面放入的students

              后面的代码同上循环。

在Android的项目中,一般不会把Json字符串解析成对象的集合,而多是解析成List<Map<String,Object>>

List<Map<String,Object>> list = new ArrayList<Map<String ,Object>>();

for (int i = 0; i < jsonArray.length(); i++) {

JSONObject jsonObject2 = jsonArray.getJSONObject(i);

Map<String ,Object> map = new HashMap<String, Object>();

Iterator<String> iterator = jsonObject2.keys();

while (iterator.hasNext()) {

String key = iterator.next();

Object value = jsonObject2.get(key);

map.put(key, value);

}

list.add(map);

}

要解析成对象集合,还是用Gson, fastjson比较方便。

三、Gson
toJson(Object)  把对象转为json字符串
fromJson(String, Object)   把json字符串转为对象

[转]Android解析json数据的更多相关文章

  1. Android解析Json数据之Gson解析

    Gson是谷歌官方提供的解析json数据的工具类.json数据的解析能够使用JSONObject和JSONArray配合使用解析数据,可是这样的原始的方法对于小数据的解析还是有作用的,可是陪到了复杂数 ...

  2. Android解析json数据

    Json数据 [{"code":"110000","sheng":"11","di":"0 ...

  3. android基础---->JSON数据的解析

    上篇博客,我们谈到了XML两种常用的解析技术,详细可以参见我的博客(android基础---->XMl数据的解析).网络传输另外一种数据格式JSON就是我们今天要讲的,它是比XML体积更小的数据 ...

  4. Android中使用Gson解析JSON数据的两种方法

    Json是一种类似于XML的通用数据交换格式,具有比XML更高的传输效率;本文将介绍两种方法解析JSON数据,需要的朋友可以参考下   Json是一种类似于XML的通用数据交换格式,具有比XML更高的 ...

  5. Android系列---JSON数据解析

    您可以通过点击 右下角 的按钮 来对文章内容作出评价, 也可以通过左下方的 关注按钮 来关注我的博客的最新动态. 如果文章内容对您有帮助, 不要忘记点击右下角的 推荐按钮 来支持一下哦 如果您对文章内 ...

  6. Android 之 json数据的解析(jsonReader)

    json数据的解析相对而言,还是比较容易的,实现的代码也十分简单.这里用的是jsonReade方法来进行json数据解析. 1.在解析之前,大家需要知道什么是json数据. json数据存储的对象是无 ...

  7. Android网络之数据解析----使用Google Gson解析Json数据

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  8. Android的JSON数据解析

    一. 使用原生方式解析 准备工作:准备一个布局文件,用来显示元数据与转换之后的数据 <?xml version="1.0" encoding="utf-8" ...

  9. Android 之JSON数据解析

    (以下基本都是郭霖大神<第一行代码>中的知识) JSON数据与xml相比,优势在于体积更小,传输所需的流量少.但是缺点也很明显,就是语义性较差. 下面是一组JSON格式的数据. [{&qu ...

随机推荐

  1. Petya and Origami

    Petya is having a party soon, and he has decided to invite his nn friends. He wants to make invitati ...

  2. Python入门字符编码

    计算机基础知识 一.应用程序任何操作硬件的请求都需要向操作系统发起系统调用,然后由操作系统去操作硬件 二.文本编辑器存取文件的原理 1.打开编辑器就打开了启动了一个进程,是在内存中的,所以,用编辑器编 ...

  3. 关于django的模板层

    你可能已经注意到我们在例子视图中返回文本的方式有点特别. 也就是说,HTML被直接硬编码在 Python代码之中. def current_datetime(request): now = datet ...

  4. rsync常见故障

    1.1 rsync客户端执行rsync命令错误: 客户端的错误现象: [root@nfs01 tmp]# rsync -avz /etc/hosts rsync_backup@172.16.1.41: ...

  5. 检测客户pc电脑端VC++环境并安装

    CefSharp 是一个非常不错的cef封装.但它依赖于VC++环境. 具体如下: Branch CEF Version VC++ Version .Net Version Status master ...

  6. sofa-boot(1)helloworld项目

    本示例参考:https://www.sofastack.tech/sofa-boot/docs/QuickStart 示例采用sofa-boot 3.1.1版本. 如下步骤: 1.进入https:// ...

  7. /var 目录下文件系统

    /var    :日志文件/var/log:各种系统日志存放地*/var/log/message :系统信息默认日志文件 (非常重要)按周自动轮循/var/log/secure  :记录登入系统信息文 ...

  8. thinkPHP5.0验证码不显示

    1.使用composer安装时,验证码无法正常显示 主要是因为验证码扩展库的版本安装不正常,官方的5.0版本的扩展库版本号都是1.*,默认安装的是2.0版本,2.0版本均为ThinkPHP5.1版本专 ...

  9. Angular JS ng-repeat 报错 Error: [ngRepeat:dupes]

    ng-repeat常用情况: <div class="form-group" ng-repeat="item in items"></div& ...

  10. mapreduce求平均数

    1. 现有某电商关于商品点击情况的数据文件,表名为goods_click,包含两个字段(商品分类,商品点击次数),分隔符“     ”,由于数据很大,所以为了方便统计我们只截取它的一部分数据,内容如下 ...