目前解析json有三种工具:org.json(Java常用的解析),fastjson(阿里巴巴工程师开发的),Gson(Google官网出的),解析速度最快的是Gson,下载地址:https://code.google.com/p/google-gson/
什么是JSON:
JSON即JavaScript Object Natation, 它是一种轻量级的数据交换格式, 与XML一样, 是广泛被采用的客户端和服务端交互的解决方案.
JSON对象:
JSON中对象(Object)以"{"开始, 以"}"结束. 对象中的每一个item都是一个key-value对, 表现为"key:value"的形式, key-value对之间使用逗号分隔. 如:{"name":"coolxing", "age"=24, "male":true, "address":{"street":"huiLongGuan", "city":"beijing", "country":"china"}}. JSON对象的key只能是string类型的, 而value可以是string, number, false, true, null, Object对象甚至是array数组, 也就是说可以存在嵌套的情况.
JSON数组:
JSON数组(array)以"["开始, 以"]"结束, 数组中的每一个元素可以是string, number, false, true, null, Object对象甚至是array数组, 数组间的元素使用逗号分隔. 如["coolxing", 24, {"street":"huiLongGuan", "city":"beijing", "country":"china"}].
Gson的基本使用方法:
通过获取JsonReader对象解析JSON数据:
String jsonData = "[{\"username\":\"arthinking\",\"userId\":001},{\"username\":\"Jason\",\"userId\":002}]"; try{ JsonReader reader = new JsonReader(new StringReader(jsonData)); reader.beginArray(); while(reader.hasNext()){ reader.beginObject(); while(reader.hasNext()){ String tagName = reader.nextName(); if(tagName.equals("username")){ System.out.println(reader.nextString()); } else if(tagName.equals("userId")){ System.out.println(reader.nextString()); } } reader.endObject(); } reader.endArray(); } catch(Exception e){ e.printStackTrace(); }
通过把JSON数据映射成一个对象,使用Gson对象的fromJson()方法获取一个对象数组进行操作:
创建JSON数据对应的一个POJO对象User.java:
public class User { private String username ; private int userId ; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public int getUserId() { return userId; } public void setUserId(int userId) { this.userId = userId; } }
使用Gson对象获取User对象数据进行相应的操作:
Type listType = new TypeToken<LinkedList<User>>(){}.getType(); Gson gson = new Gson(); LinkedList<User> users = gson.fromJson(jsonData, listType); for (Iterator iterator = users.iterator(); iterator.hasNext();) { User user = (User) iterator.next(); System.out.println(user.getUsername()); System.out.println(user.getUserId()); }
如果要处理的JSON字符串只包含一个JSON对象,则可以直接使用fromJson获取一个User对象:
String jsonData = "{\"username\":\"arthinking\",\"userId\":001}"; Gson gson = new Gson(); User user = gson.fromJson(jsonData, User.class); System.out.println(user.getUsername()); System.out.println(user.getUserId());
数据格式:
- {
- "data": {
- "partnerteamlist": [
- {
- "pteamId": 72825,
- "ptitle": "随摄影/共6套服装/准爸准妈共拍/免费肚画/底片全送。",
- "pteamprice": 288
- },
- {
- "pteamId": 72598,
- "ptitle": "随摄影/拍摄200张/4本相册/品质拍摄/送全新婚纱。",
- "pteamprice": 2888
- },
- {
- "pteamId": 72613,
- "ptitle": "随摄影/送全新婚纱/多外景拍摄/服装不限数量/绝无二次消费!",
- "pteamprice": 3699
- },
- {
- "pteamId": 72638,
- "ptitle": "随摄影/服装不限数量/高品质拍摄260张/送全新婚纱。",
- "pteamprice": 4299
- },
- {
- "pteamId": 72716,
- "ptitle": "随摄影/3组服装造型/内外景拍摄/完全透明消费!",
- "pteamprice": 388
- }
- ],
- "liketeamlist": [
- {
- "lteamId": 65886,
- "ltitle": "爱丽尔婚纱摄影/2本相册/6套服装造型/拍摄不限最低拍摄150张。",
- "limage": "http://img.pztuan.com/upfile/team/2013/0712/201307120257551465.jpg",
- "lteamprice": 518,
- "lmarketprice": 3999
- },
- {