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方式)

    要创建和解析JSON数据,也可以使用GSON来完成.GSON是Google提供的用来在Java对象和JSON数据之间进行映射的Java类库.使用GSON,可以很容易的将一串JSON数据转换为一个Jav ...

  2. Android JSON数据解析(数据传输)

    上篇随笔详细介绍了三种解析服务器端传过来的xml数据格式,而对于服务器端来说,返回给客户端的数据格式一般分为html.xml和json这三 种格式,那么本篇随笔将讲解一下json这个知识点,包括如何通 ...

  3. Android Json数据解析

    1.通过主Activity的Button按钮进行解析 public class MainActivity extends Activity { private Button button=null; ...

  4. Android学习笔记之JSON数据解析

    转载:Android学习笔记44:JSON数据解析 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,为Web应用开发提供了一种 ...

  5. JSON数据解析(转)

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,为Web应用开发提供了一种理想的数据交换格式. 本文将主要介绍在Android ...

  6. JSON数据解析(GSON方式) (转)

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,为Web应用开发提供了一种理想的数据交换格式. 在上一篇博文<Andro ...

  7. iOS学习——JSON数据解析(十一)

    在之前的<iOS学习——xml数据解析(九)>介绍了xml数据解析,这一篇简单介绍一下Json数据解析.JSON 即 JavaScript Object Natation,它是一种轻量级的 ...

  8. Android JSON原生解析的几种思路,以号码归属地,笑话大全,天气预报为例演示

    Android JSON原生解析的几种思路,以号码归属地,笑话大全,天气预报为例演示 今天项目中要实现一个天气的预览,加载的信息很多,字段也很多,所以理清了一下思路,准备独立出来写一个总结,这样对大家 ...

  9. iOS学习笔记(十一)——JSON数据解析

    在之前的<iOS学习——xml数据解析(九)>介绍了xml数据解析,这一篇简单介绍一下Json数据解析.JSON 即 JavaScript Object Natation,它是一种轻量级的 ...

随机推荐

  1. 自己动手编写vue插件

    一.为什么要自己动手写插件呢,原因有二: 其一:是因为最近产品了提了一个在web端接收,消息通知的需求,产品要求在若干个页面内如果有消息,就要弹出消息弹窗展示给用户,略加思索之后,第一反应就是写个消息 ...

  2. 洛谷 3398 仓鼠找sugar 【模板】判断树上两链有交

    [题解] 题意就是判断树上两条链是否有交.口诀是“判有交,此链有彼祖”.即其中一条链的端点的Lca在另一条链上. 我们设两条链的端点的Lca中深度较大的为L2,对L2与另一条链的两个端点分别求Lca, ...

  3. [bzoj3106][cqoi2013][棋盘游戏] (对抗搜索+博弈论)

    Description 一个n*n(n>=2)棋盘上有黑白棋子各一枚.游戏者A和B轮流移动棋子,A先走. l         A的移动规则:只能移动白棋子.可以往上下左右四个方向之一移动一格. ...

  4. Hello Shiro

    [HelloWorld Shiro] 1.搭建开发环境-加入jar包 2.步骤(前提:已下载好Shiro资源包): ①找到shiro-root-1.2.3-source-release包, ②按Apa ...

  5. java json数据转List对象的集合-----阿里巴巴插件---及原生json---JSON 与 对象 、集合 之间的转换 JSON字符串和java对象的互转【json-lib】

    List<RunfastFullLess> list=(List<RunfastFullLess>)JSONArray.parseObject(activity.getFull ...

  6. Tyvj1139 向远方奔跑(APIO 2009 抢掠计划)

    描述     在唐山一中,吃饭是一件很令人头疼的事情,因为你不可能每次都站在队伍前面买饭,所以,你最需要做的一件事就是——跑饭.而跑饭的道路是无比艰难的,因为路是单向的(你要非说成是双向的我也没法,前 ...

  7. - > 网络流(【最大流】草地排水模板题)

    1993 草地排水 USACO  时间限制: 2 s  空间限制: 256000 KB  题目等级 : 钻石 Diamond 题解       题目描述 Description 在农夫约翰的农场上,每 ...

  8. JAVA包装类的缓存范围

    JAVA包装类的缓存范围 前两天面试遇到两个关于JAVA源码的问题,记录下来提醒自己. 1.写出下面的输出结果 System.out.println(Integer.valueOf("100 ...

  9. Open Flash Chart 简介

    http://www.ibm.com/developerworks/cn/opensource/os-cn-ecl-ofc/ Open Flash Chart(OFC)是一个开源的 Flash 图表绘 ...

  10. C++学习之命名空间

    在C++中,命名空间(namespace)的目的是为了防止名字冲突.每个命名空间是一个作用域,在所有命名空间之外,还存在一个全局命名空间(global namespace),全局命名空间以隐式的方式声 ...