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. java修饰符的一些知识点

    1.java默认的修饰符是不加任何标志,默认为包修饰符,在同一个包下的类都可以对其进行调用.若需要进行跨包调用,往往需要加上修饰符public2.public修饰符对需要调用其的消费者都是可见的,一个 ...

  2. 读经典——《CLR via C#》(Jeffrey Richter著) 笔记_发布者策略控制

    在 读经典——<CLR via C#>(Jeffrey Richter著) 笔记_高级管理控制(配置)中,是由程序集的发布者将程序集的一个新版本发送给管理员,后者安装程序集,并手动编辑应用 ...

  3. django 视图view

    视图里一般是函数和类,需要返回响应. 试图分为2种:2. CBV(class base view) FBV(function base view) from django.views import V ...

  4. Appium自动化—浅谈iOS自动化测试环境搭建

    在日常的测试工作中,我们会发现有些测试工作重复率极高,测试人员需要花费大量的时间进行这些重复性的测试,浪费了大量的人力与时间.若能够将常用的测试场景进行自动化,那必定能节省许多的人力与时间.作为一个初 ...

  5. win10下Anaconda3在虚拟环境python_version=3.5.3 中配置pyspark

    1. 序经过了一天的修炼,深深被恶心了,在虚拟环境中配置pyspark花式报错,由于本人实在是不想卸载3.6版的python,所以硬刚了一天,终于摸清了配置方法,并且配置成功,不抱怨了,开讲: 2. ...

  6. php composer php amqplib

    下载composer.phar放到项目根目录 d:/www/apps https://getcomposer.org/download/1.4.1/composer.phar 下载安装Composer ...

  7. eclipse使用STS插件 报错:SocketTimeoutException: Read timed out

    新建boot项目后,提示: SocketTimeoutException: Read timed out 解决: 在eclipse.ini末尾,追加: -Djava.net.preferIPv4Sta ...

  8. 问题解决Determine IP information for eth0.. no link present check cable

    网上方法都没有解决:简单粗暴编辑里还原了默认设置OK了 网上方法1 一般解决办法: 第一步: 到/etc/sysconfig/network-scripts/ifcfg-eth<n>/et ...

  9. Dev Express Report 学习总结(五)在分组中使用聚集表达式AggregateExpression

    聚集表达式AggregateExpression主要包括几种:Avg(),Count(),Exists(),Max(),Min(),Single()和Sum().其中对于Sum(),在我看来主要有两种 ...

  10. bootstrap-datepicker控件中文 ,只显示年和只显示月份

    插件下载地址 https://github.com/uxsolutions/bootstrap-datepicker html <link href="css/bootstrap-da ...