Gson解析json数据

article/2025/10/21 2:02:11

gson是谷歌推出的,除此之外还有阿里的FastJson,官方json和jackjson。下面通过一个实例来讲解使用gson来解析json数据:

1.先做好准备工作,在网上下载Gson的jar包,放到工程的libs(没有此目录的话自己建一个)目录下:

http://download.csdn.net/detail/ljw124213/9612607

2.要解析的json数据格式如下,详细的json数据放在了文章的末尾,这里推荐大家使用HiJson来查看jason数据。另外,介绍一种获得json/xml数据的途径:在网上注册一个聚合数据的账号,申请免费的数据用来测试。



3,使用gson解析json数据的关键在于创建json数据所对应的JavaBean类,创建此类的技巧为:从外层到内层,对象作为上一层的参数,数组作为上一层的内部类,如果有多个节点相同的数组,只需创建一个。详细代码如下:

<span style="font-size:18px;">package day28_client_Gson_test2;import java.util.ArrayList;public class Car {public String error_code;public String reason;//result节点是一个数组,封装到集合中ArrayList<Result>result = new ArrayList<>();//再把此数组作为内部类public static class Result{public String _id;public String info;//result节点下的stats节点又是一个数组ArrayList<Stats>stats = new ArrayList<>();public static class Stats{public String _id;public String lat;public String lng;}}
}</span>

提示:创建此JavaBean对象需要注意两点,

1:内部类必须要用static(静态的)来修饰。

2:类的属性名必须跟json数据里面的key值相同,包括集合的名字。

4.使用gson工具类进行解析的java代码如下,因为代码中已经做了详细的解析,这里不在啰嗦:

<span style="font-size:18px;">package day28_client_Gson_test2;import java.util.ArrayList;
import com.google.gson.Gson;
import day28_client_Gson_test2.Car.Result;
import day28_client_Gson_test2.Car.Result.Stats;public class TestCar {public static void main(String[] args) {//使用获取json数据的工具类来获取json数据,数据可以是本地的或网络上的String netData = NetUtils.getNetData("http://localhost:8080/json/car.json");//实例化Gson对象,前提是导入了gson的jar包Gson gson = new Gson();/** 调用fromJson方法,把获得的json数据转换为字符串* 第一个参数为要转换的json数据* 第二个参数为实体类*/Car car = gson.fromJson(netData, Car.class);System.out.println(car.error_code + "\t" + car.reason);/** result节点是一个数组,所以要通过遍历的方法取出其中的属性* 技巧:实体类中的内部类都对应一个数组*/ArrayList<Result> result = car.result;for (Result res : result) {//获取result节点下的属性_id和info,并输出System.out.println(res._id + "\t" + res.info);//result节点下的stats又是一个数组,继续遍历ArrayList<Stats> stats = res.stats;for (Stats stat : stats) {//获取stats节点下的属性_id、lat和lng,并输出System.out.println(stat._id + "\t纬度:" + stat.lat + "\t经度:" + stat.lng);}}}
}</span>

5.上面的java类使用了获取json数据的工具类,此类封装在了另一个java代码中:

<span style="font-size:18px;">package day28_client_Gson_test2;import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;/*** 根据url获取网络上的json数据的工具类* @author Administrator* @urlAdd 获取json数据的地址*/
public class NetUtils {public static String getNetData(String urlAdd){try {URL url = new URL(urlAdd);HttpURLConnection conn = (HttpURLConnection) url.openConnection();conn.setRequestMethod("GET");conn.setReadTimeout(5000);conn.setConnectTimeout(5000);if (conn.getResponseCode() == 200) {InputStream is = conn.getInputStream();ByteArrayOutputStream baos = new ByteArrayOutputStream();byte[] buf = new byte[1024];int len;while((len = is.read(buf))!=-1){baos.write(buf, 0, len);}byte[] array = baos.toByteArray();return new String(array, "UTF-8");}} catch (Exception e) {e.printStackTrace();}return null;}
}</span>

6.下面是要解析的json数据:

<span style="font-size:14px;">{"error_code": 0,"reason": "请求成功!","result": [{"_id": "903路(兴华街公交站-沙门村)","info": "首末车:5:40-21:00;","stats": [{"_id": "兴华街公交站","lat": 34.719569,"lng": 113.632867},{"_id": "兴华街航海路","lat": 34.720998,"lng": 113.632877},{"_id": "兴华街政通路","lat": 34.725685,"lng": 113.63289},{"_id": "绿云小区","lat": 34.728922,"lng": 113.632864},{"_id": "兴华街汝河路","lat": 34.728902,"lng": 113.635419},{"_id": "汝河路淮北街","lat": 34.73037,"lng": 113.63625},{"_id": "大学路路寨","lat": 34.735588,"lng": 113.644124},{"_id": "大学路桃源路","lat": 34.740809,"lng": 113.644053},{"_id": "大学路中原路","lat": 34.746116,"lng": 113.644154},{"_id": "中原路大学路","lat": 34.747456,"lng": 113.645423},{"_id": "中原路京广路","lat": 34.74749,"lng": 113.65055},{"_id": "二七广场正兴街","lat": 34.752056,"lng": 113.664866},{"_id": "百货大楼","lat": 34.756745,"lng": 113.666929},{"_id": "人民公园东门","lat": 34.76138,"lng": 113.66691},{"_id": "新通桥","lat": 34.76433,"lng": 113.66944},{"_id": "紫荆山金水路西","lat": 34.76367,"lng": 113.68111},{"_id": "花园路口","lat": 34.768709,"lng": 113.682087},{"_id": "花园路黄河路","lat": 34.775084,"lng": 113.68219},{"_id": "花园路红专路","lat": 34.779702,"lng": 113.68223},{"_id": "花园路丰产路","lat": 34.783268,"lng": 113.682073},{"_id": "花园路农科路","lat": 34.792953,"lng": 113.681792},{"_id": "花园路鑫苑路","lat": 34.7997,"lng": 113.68171},{"_id": "省广播电视中心","lat": 34.805987,"lng": 113.681593},{"_id": "汽配大世界","lat": 34.81188,"lng": 113.681373},{"_id": "国基路花园路","lat": 34.81961,"lng": 113.68187},{"_id": "国基路沙门村","lat": 34.823412,"lng": 113.682195},{"_id": "沙门村","lat": 34.824186,"lng": 113.673741}]},{"_id": "903路(沙门村-兴华街公交站)","info": "兴华街公交站--沙门村 6:00-21:00;;票价1元,a/b/c/d卡有效。","stats": [{"_id": "沙门村","lat": 34.824148,"lng": 113.674206},{"_id": "花园路沙门村","lat": 34.823459,"lng": 113.681904},{"_id": "汽配大世界","lat": 34.81187,"lng": 113.68129},{"_id": "省广播电视中心","lat": 34.80388,"lng": 113.68148},{"_id": "花园路鑫苑路","lat": 34.79958,"lng": 113.68157},{"_id": "花园路农科路","lat": 34.792865,"lng": 113.681652},{"_id": "花园路关虎屯","lat": 34.785795,"lng": 113.681616},{"_id": "花园路丰产路","lat": 34.783197,"lng": 113.681966},{"_id": "花园路红专路","lat": 34.779535,"lng": 113.682015},{"_id": "花园路黄河路","lat": 34.77497,"lng": 113.68204},{"_id": "花园路口","lat": 34.769509,"lng": 113.682002},{"_id": "紫荆山金水路西","lat": 34.764121,"lng": 113.679542},{"_id": "新通桥","lat": 34.76448,"lng": 113.6693},{"_id": "人民公园东门","lat": 34.76124,"lng": 113.6669},{"_id": "百货大楼","lat": 34.75664,"lng": 113.66691},{"_id": "二七广场解放路","lat": 34.752733,"lng": 113.664391},{"_id": "中原路京广路","lat": 34.747585,"lng": 113.650251},{"_id": "中原路大学路","lat": 34.747619,"lng": 113.644828},{"_id": "大学路中原路","lat": 34.746212,"lng": 113.643909},{"_id": "大学路桃源路","lat": 34.740043,"lng": 113.643969},{"_id": "大学路路寨","lat": 34.73619,"lng": 113.64398},{"_id": "汝河路淮北街","lat": 34.72892,"lng": 113.63649},{"_id": "绿云小区","lat": 34.72893,"lng": 113.632883},{"_id": "兴华街政通路","lat": 34.725377,"lng": 113.632868},{"_id": "兴华街航海路","lat": 34.720945,"lng": 113.632877},{"_id": "兴华街公交站","lat": 34.7196,"lng": 113.632825}]}]
}</span>




http://chatgpt.dhexx.cn/article/SokTGHC8.shtml

相关文章

Android Gson解析json

前言&#xff1a; 解析json的库有很多&#xff0c;如&#xff1a;JSON-Java、Gson、Jackson、FastJson…而Gson是谷歌的&#xff0c;相信自有它的好处 简介 用于json与java对象之间的转换通过 序列化和反序列化 实现功能强大&#xff0c;稳定性也好 使用 Gson提供了两个方…

Android 使用 Gson 解析 json 数据及生成

1.导入 Gson 包 第一种导入Gson 包的方式 在 app 文件下的 build.gradle 文件 导入 gson:2.9.1 包 implementation com.google.code.gson:gson:2.9.1第二种导入Gson 包的方式 直接去下载最新的 Gson 包 下载链接&#xff1a;gson.jar 选择最新的包进行下载 将下载的 gson…

用Gson解析json

首先我们需要导入gson的jar包&#xff0c;因为gson解析方法不是java官方的而是谷歌提供的。 一.把json数据转成java对象 首先因为已经手动导入了jar包&#xff0c;现在只需创建解析器对象&#xff0c;当然首先得有一个json类型的文件地址&#xff0c;和文件输出流 第二步调用…

Android --Gson解析json数据

Android --Gson解析json数据 private void analyseJson() throws Exception {InputStream isgetAssets().open("dataTest.json");ByteArrayOutputStream baosnew ByteArrayOutputStream();byte[] bytesnew byte[1024];int len;while ((lenis.read(bytes))!-1){baos.…

Gson解析json字符串

Gson 怎样使用gson把一个json字符串解析成一个jsonObject对象 因此我要把上面的fastjson转换成是gson&#xff0c;如下图&#xff1a; JsonObject object new JsonParser().parse(result).getAsJsonObject();怎样从gson中取出键的值 使用gson把json字符串转换成一个list集合 …

使用Gson解析Json数据

目录 一、Gson介绍 二、使用方法 完整代码&#xff1a; MainActivity: 布局&#xff1a; 运行结果&#xff1a; 一、Gson介绍 Gson是Google提供的一个Java库&#xff0c;用于将Java对象转换为JSON格式数据或将JSON格式数据转换为Java对象。 常用方法&#xff1a; 方法名…

用GSON解析Json格式数据

GSON是谷歌提供的开源库&#xff0c;用来解析Json格式的数据&#xff0c;非常好用。如果要使用GSON的话&#xff0c;则要先下载gson-2.2.4.jar这个文件&#xff0c;如果是在Android项目中使用&#xff0c;则在Android项目的libs目录下添加这个文件即可&#xff1b;如果是在Java…

Gson解析JSON

1.介绍 Gson是Google提供的处理JSON数据的Java类库&#xff0c;主要用于转换Java对象和JSON对象。 2.依赖 <!-- https://mvnrepository.com/artifact/com.google.code.gson/gson --> <dependency><groupId>com.google.code.gson</groupId><artifac…

python 学习笔记—— #(井号)的作用

在Python语言中&#xff0c;经常看到#后面跟着一些文字。#的作用就是注释&#xff0c;用于解释代码是怎样的逻辑或者作用&#xff0c;方便自己或者别的程序员阅读代码时能够理解代码的意义。 例如 &#xff1a; 我们可以看到# &#xff08;井号&#xff09;跟着的文字是不会被程…

vue 输入网址后,url中自动出现井号#,如何去除

问题描述&#xff1a; 解决方法&#xff1a; 1.打开 2.找到 3.删除Hash 4.成功

URL中#号(井号)的作用

今天又看到了一篇非常好的来自HTTPWatch的文章&#xff0c;不得不推荐给大家。 1. 井号在URL中指定的是页面中的一个位置 井号作为页面定位符出现在URL中&#xff0c;比如&#xff1a;http://www.httpwatch.com/features.htm#print &#xff0c;此URL表示在页面features.htm中p…

StartUML 画类图操作大全

文章目录 基本用法新建项目添加模型添加类图修改项目、模型、类属性配置项目Profile添加类图添加类属性其余Tool的用法 进阶用法枚举方法/属性的类型方法返回值方法/属性的属性方法/属性的静态属性 最后 基本用法 新建项目 打开StartUML&#xff0c;选择Empty Project&#xff…

StarUML使用教程【画类图】

1.打开StarUML 打开后&#xff0c;默认就是画类图的模式 默认创建了一个untitled项目 2.修改工程名字 ** 鼠标双击** 【Untitled】 在这里进行填写相关信息 修改后&#xff0c;就变成了你修改的那个名字 3.创建类图 右键 右侧的名字&#xff0c;选择Add Diagram—>Class…

Idea怎么实现画类图

1.【file】-【Settings】-【Tools】-【Diagrams】-勾选Java Class Diagram的选项 2.右击类&#xff0c;【Diagrams】-【Show Diagram】

使用mermaid画类图

使用mermaid画类图 文章目录 使用mermaid画类图1.类与类之间的关系2.各种关系的强弱顺序 1.类与类之间的关系 mermaid类图关系语法 泛化&#xff08;Inheritance&#xff09; 一种继承关系&#xff0c;表示一般与特殊的关系&#xff0c;它指定了子类如何特化父类的所有特征和…

UML类图

一、类的属性的表示方式 在UML类图中&#xff0c;类使用包含类名、属性(field) 和方法(method) 且带有分割线的矩形来表示&#xff0c;比如下图表示一个Employee类&#xff0c;它包含name,age和email这3个属性&#xff0c;以及modifyInfo()方法。 那么属性/方法名称前加的加号…

EA enterprise architect 画类图

准备工作 新建文件&#xff0c;参考画用例图的新建文件 画类图 以此为例 画类 工具箱&#xff0c;选中calss->class拖拽到左侧&#xff0c;填写类名 右键点击创建的类&#xff0c;选择功能与属性。属性类似于变量&#xff0c;功能类似于函数。为类添加属性和功能。 …

使用PlantUml插件画类图

一、PlantUml简介二、类与类之间关系汇总整理三、PlantUml类图语法介绍四、类图五、类图 PlantUml 代码 本文介绍如何使用 PlantUml 插件来画 Uml 图 一、PlantUml简介 PlantUML 是一个可以快速编写各种图表的工具&#xff0c;可以通过安装 Intellij Idea 或者 Vs Code 插件来…

UML类图画法全程解析

本节向大家介绍一下UML类图画法&#xff0c;主要包括UML类图元素和关系画法&#xff0c;希望通过本文的介绍&#xff0c;你对UML类图画法有一定的认识。 软件设计起步&#xff1a;UML类图画法 学习设计模式&#xff0c;画UML类图是基础&#xff0c;通过UML类图&#xff0c;能…

使用StarUML画类图

原文链接&#xff1a;http://www.flyne.org/article/379 staruml比rational rose小多了&#xff0c;觉得也很实用&#xff0c;似乎免费 1、综述&#xff08;What&#xff09; StarUML是一种生成类图和其他类型的UML图表的工具。本文是一个使用StarUML创建类图(Java语言描述)的简…