Gson解析和封装json数据

Gson 是 Google 提供的用来在 Java 对象和 JSON 数据之间进行映射的 Java 类库。可以将一个 JSON 字符串转成一个 Java 对象,或者反过来。

 

 

示例代码:

Gson gson = new Gson();
int[] ints = {1, 2, 3, 4, 5};
String[] strings = {"abc", "def", "ghi"};

(Serialization)
gson.toJson(ints);     ==> prints [1,2,3,4,5]
gson.toJson(strings);  ==> prints ["abc", "def", "ghi"]

 

 

 

JSON的全称是”JavaScript Object Notation”,意思是JavaScript对象表示法,它是一种基于文本,独立于语言的轻量级数据交换格式。XML也是一种数据交换格式,为什么没有选择XML呢?因为XML虽然可以作为跨平台的数据交换格式,但是在JS(JavaScript的简写)中处理XML非常不方便,同时XML标记比数据多,增加了交换产生的流量,而JSON没有附加的任何标记,在JS中可作为对象处理,所以我们更倾向于选择JSON来交换数据。

 

JSON的两种结构

 

JSON有两种表示结构,对象和数组。
对象结构以”{”大括号开始,以”}”大括号结束。中间部分由0或多个以”,”分隔的”key(关键字)/value(值)”对构成,关键字和值之间以”:”分隔,语法结构如代码。

{
    key1:value1,
    key2:value2,
    ...
}

其中关键字是字符串,而值可以是字符串,数值,true,false,null,对象或数组

数组结构以”[”开始,”]”结束。中间由0或多个以”,”分隔的值列表组成,语法结构如代码

 

var obj = {
            1: "value1",
            "2": "value2",
            count: 3,
            person: [ //数组结构JSON对象,可以嵌套使用
                        {
                            id: 1,
                            name: "张三"
                        },
                        {
                            id: 2,
                            name: "李四"
                        }
                   ],
            object: { //对象结构JSON对象
                id: 1,
                msg: "对象里的对象"    
            }
        };

 

 

 

 

下面以一个天气的json格式数据

{
    "error": 0,
    "status": "success",
    "date": "2014-05-10",
    "results": [
        {
            "currentCity": "南京",
            "weather_data": [
                {
                    "date": "周六(今天, 实时:19℃)",
                    "dayPictureUrl": "http://api.map.baidu.com/images/weather/day/dayu.png",
                    "nightPictureUrl": "http://api.map.baidu.com/images/weather/night/dayu.png",
                    "weather": "大雨",
                    "wind": "东南风5-6级",
                    "temperature": "18℃"
                },
                {
                    "date": "周日",
                    "dayPictureUrl": "http://api.map.baidu.com/images/weather/day/zhenyu.png",
                    "nightPictureUrl": "http://api.map.baidu.com/images/weather/night/duoyun.png",
                    "weather": "阵雨转多云",
                    "wind": "西北风4-5级",
                    "temperature": "21 ~ 14℃"
                }
            ]
        }
    ]
}

 

现在有好多在线解析json数据的工具,方面我们分析json数据的结构

 

比如:在线代码格式化

 

利用在线工具,可以看到json数据的结构,方面我们根据json数据结构来构建解析的实体类

 

根据json格式定义对应的实体类,方便我们使用gson来封装或者解析json格式数据。(实体类的属性名尽量和json的键名相同,虽然可以通过注解指定名字,但不是很方便

使用 @SerializedName()可以进行修改)

 

 

<span style="font-family:KaiTi_GB2312;font-size:18px;">package com.usc.bean;

import java.util.List;

public class Status {
	private String error;
	private String status;
	private String date;
	private List<Results> results;

	public String getError() {
		return error;
	}

	public void setError(String error) {
		this.error = error;
	}

	public String getStatus() {
		return status;
	}

	public void setStatus(String status) {
		this.status = status;
	}

	public String getDate() {
		return date;
	}

	public void setDate(String date) {
		this.date = date;
	}

	public List<Results> getResults() {
		return results;
	}

	public void setResults(List<Results> results) {
		this.results = results;
	}

	@Override
	public String toString() {
		return "Status [error=" + error + ", status=" + status + ", date="
				+ date + ", results=" + results + "]";
	}

}
</span>

 

<span style="font-family:KaiTi_GB2312;font-size:18px;">package com.usc.bean;

import java.util.List;

public class Results {
	private String currentCity;
	private List<Weather> weather_data;

	public String getCurrentCity() {
		return currentCity;
	}

	public void setCurrentCity(String currentCity) {
		this.currentCity = currentCity;
	}

	public List<Weather> getWeather_data() {
		return weather_data;
	}

	public void setWeather_data(List<Weather> weather_data) {
		this.weather_data = weather_data;
	}

	@Override
	public String toString() {
		return "Results [currentCity=" + currentCity + ", weather_data="
				+ weather_data + "]";
	}

}
</span>

 

 

 

 

 

 

<span style="font-family:KaiTi_GB2312;font-size:18px;">package com.usc.bean;

public class Weather {
	private String dayPictureUrl;
	private String nightPictureUrl;
	private String weather;
	private String wind;
	private String temperature;
	private String date;
	

	public String getDate() {
		return date;
	}

	public void setDate(String date) {
		this.date = date;
	}

	public String getDayPictureUrl() {
		return dayPictureUrl;
	}

	public void setDayPictureUrl(String dayPictureUrl) {
		this.dayPictureUrl = dayPictureUrl;
	}

	public String getNightPictureUrl() {
		return nightPictureUrl;
	}

	public void setNightPictureUrl(String nightPictureUrl) {
		this.nightPictureUrl = nightPictureUrl;
	}

	public String getWeather() {
		return weather;
	}

	public void setWeather(String weather) {
		this.weather = weather;
	}

	public String getWind() {
		return wind;
	}

	public void setWind(String wind) {
		this.wind = wind;
	}

	public String getTemperature() {
		return temperature;
	}

	public void setTemperature(String temperature) {
		this.temperature = temperature;
	}

	@Override
	public String toString() {
		return "Weather [dayPictureUrl=" + dayPictureUrl + ", nightPictureUrl="
				+ nightPictureUrl + ", weather=" + weather + ", wind=" + wind
				+ ", temperature=" + temperature + "]";
	}

}
</span>

 

 

 

 

 

将上面的天气json数据放在weather.txt里面,方便我们通过数据流读取。

 

使用Gson解析前,需要导入相应的jar包,网上很多

 

下面开始解析

 

 

<span style="font-family:KaiTi_GB2312;font-size:18px;">import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

import com.google.gson.Gson;
import com.usc.bean.Results;
import com.usc.bean.Status;
import com.usc.bean.Weather;


public class TestGson {
	public static void main(String[] args) throws IOException {
		File file=new File("weather.txt");
		BufferedReader bf=new BufferedReader(new InputStreamReader(new FileInputStream(file)));
		StringBuilder weatherString=new StringBuilder();
		String str="";
		while((str=bf.readLine())!=null){
			weatherString.append(str);
		}
		//System.out.println(weatherString.toString());
		
		Gson gson=new Gson();
		Status status= gson.fromJson(weatherString.toString(), Status.class);
		System.out.println(status.getStatus());
		System.out.println(status.getDate());
		System.out.println(status.getError());
		List<Results> results= status.getResults();
		//System.out.println(results);
		for (int i = 0; i < results.size(); i++) {
			Results result= results.get(i);
			System.out.println(result.getCurrentCity());
			List<Weather> weathers= result.getWeather_data();
			for (int j = 0; j < weathers.size(); j++) {
				Weather weather= weathers.get(j);
				System.out.println(weather.getDate());
				System.out.println(weather.getDayPictureUrl());
				System.out.println(weather.getNightPictureUrl());
				System.out.println(weather.getTemperature());
				System.out.println(weather.getWeather());
				System.out.println(weather.getWind());
			}
		}
		
	}
}
</span>


json数组用java的集合来封装,一切面向对象,使用gson解析json方便快捷。

 

有什么意见请留言,欢迎指教。

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值