前言:最近需要实现的任务是:写若干个接口,并且接口中的请求数据是json格式,然后按照请求参数读取前端提前整理好的json数据,并且将json数据返回到服务器端。

  • 主要的工具:Gson  2.8.2
  • 项目支撑:springboot
  • maven

0、前导——了解一下基本的json语法

JSON是一种类似 XML的语言,是用了存储和交换文本信息的语法。它的全称为JavaScript Object Notation(JavaScript 对象表示法)。与xml对比,它更小、更快,更易解析。

想要更好的解析JSON,必须能看懂JSON数据,这样就必须了解JSON语法,好在它的语法非常简单,规则如下:

JSON 语法是 JavaScript 对象表示法语法的子集。
- 数据在名称/值对中:如 "firstName" : "John"
- 数据由逗号分隔
- 花括号保存对象
- 方括号保存数组

而组成JSON的值可以为以下几种:

- 数字(整数或浮点数)
- 字符串(在双引号中)
- 逻辑值(true 或 false)
- 数组(在方括号中)
- 对象(在花括号中)
- null

1、导入Gson jar包

        <!-- https://mvnrepository.com/artifact/com.google.code.gson/gson -->
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.2</version>
</dependency>

关于Gson的详细信息可以参考:JAVA解析JSON数据

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

这是关于GSON的介绍,相对于传统的json解析,使用GSON能够极大的简化了解析流程。

2、下面提供一小段提前整理好的json数据

[
{
"zone_id": 100001,
"title": "围栏1",
"zone_geometry": {
"type": "polygon",
"apex": [ {
"lng": "113.166096",
"lat": "31.727309"
},
{
"lng": "113.222498",
"lat": "31.689881"
}
]
}
},
{
"zone_id": 100002,
"title": "围栏2",
"zone_geometry": {
"type": "polygon",
"apex": [
{
"lng": "113.462342",
"lat": "31.626034"
},
{
"lng": "113.472525",
"lat": "31.538983"
}
]
}
},
]

分析原始的json数据格式:原始的json数据整体是一个JsonArray,其次是JsonObject,内部包含有很多字段,里面再套有一层JsonObject,再往里面是JsonArray。

通常而言,遇到了一个[   ]  可以定义一个List,碰见一个{   } 可以定义一个实体类。

因此,我这里定义了三个实体类:

从外层往内层依次是:HerdCamera   ZoneGeometry    Apex

public class HerdCamera {
private String zone_id;
private String title;
private ZoneGeometry zoneGeometry; public String getZone_id() {
return zone_id;
} public void setZone_id(String zone_id) {
this.zone_id = zone_id;
} public String getTitle() {
return title;
} public void setTitle(String title) {
this.title = title;
} public ZoneGeometry getZoneGeometry() {
return zoneGeometry;
} public void setZoneGeometry(ZoneGeometry zoneGeometry) {
this.zoneGeometry = zoneGeometry;
} }
import java.util.List;

public class ZoneGeometry {
private String type;
private List<Locations> apex; public String getType() {
return type;
} public void setType(String type) {
this.type = type;
} public List<Locations> getApex() {
return apex;
} public void setApex(List<Locations> apex) {
this.apex = apex;
} }
public class Apex {
private double lng;
private double lat; public Apex(double lng, double lat) {
super();
this.lng = lng;
this.lat = lat;
} public double getLng() {
return lng;
} public void setLng(double lng) {
this.lng = lng;
} public double getLat() {
return lat;
} public void setLat(double lat) {
this.lat = lat;
} }

3、开始依次从外往内部解析数据源

public Map<String,Object> herdcameradata() throws Exception{
String fileName = "fileName";
     JsonParser parser = new JsonParser(); // 创建JSON解析器
JsonArray array = (JsonArray) parser.parse(new FileReader(fileName)); // 首先解析出来的是JsonArray Map< String, Object> result=new HashMap<>(); List<Object> herdCameras = new ArrayList<Object>(); for (int i = 0; i < array.size(); i++) {
JsonObject subObject = array.get(i).getAsJsonObject();         // 第二步获得的是JsonObject
HerdCamera herd = new HerdCamera();
herd.setZone_id(subObject.get("zone_id").getAsString());       //然后依次获取subObject中的每一个字段
herd.setTitle(subObject.get("title").getAsString());
ZoneGeometry zoneGeometry = new ZoneGeometry();
JsonObject subObject2 = subObject.getAsJsonObject("zone_geometry");  //第四步又获得一个zone_geometry的JsonObject
zoneGeometry.setType(subObject2.get("type").getAsString());       //然后获取zone_geometry内部的type对象
JsonArray array2 = subObject2.getAsJsonArray("apex");           //第五步中apex是一个jsonArray
List<Locations> locationList = new ArrayList<Locations>();
for (int j = 0; j < array2.size(); j++) {
Locations location = new Locations();
JsonObject subObject3 = array2.get(j).getAsJsonObject();
location.setLng(subObject3.get("lng").getAsString());
location.setLat(subObject3.get("lat").getAsString());
locationList.add(location);
}
zoneGeometry.setApex(locationList);
herd.setZoneGeometry(zoneGeometry);
herdCameras.add(herd);
} result.put("cameras",herdCameras );
return result;
}

4、结束

到现在,所有的解析都已经基本完成,但配合着controller中的映射就可以在前端获取到相关的数据。

下面给出我获取到的情况:

如何解析json字符串及返回json数据到前端的更多相关文章

  1. HttpServletResponse 返回的json数据不是json字符串,而是json对象

    今天在改一个bug 情况: 在spring boot中写了一个类Result ,用来统一封装 各个API响应结果 , 其中重写了toString()方法来返回 json字符串 . 在正常情况下,从其它 ...

  2. python字典转化成json格式。JSONEncoder和JSONDecoder两个类来实现Json字符串和dict类型数据的互相转换

    遇到问题:进行Webservice接口测试时,对接口入参数据进行了处理,变成了dict格式,去进行接口请求报错. 需要转成成json格式,双引号去扩. 如下: 更改代码: # 在Python标准库的j ...

  3. json字符串转化为json对象and 对象转化为 json字符串

    第一种方法: var data =evel('('+jsonstr+')') 解析:  这种方法是常用的方法, 即动态执行 javascript代码 在堆中存放数据. 存在安全问题. 第二种方法:   ...

  4. json字符串转换成json对象,json对象转换成字符串,值转换成字符串,字符串转成值

    一.json相关概念 json,全称为javascript object notation,是一种轻量级的数据交互格式.采用完全独立于语言的文本格式,是一种理想的数据交换格式. 同时,json是jav ...

  5. 特殊字符导致json字符串转换成json对象出错

    在对数据库取出来的数据(特别是描述信息)里面含有特殊字符的话,使用JSON.parse将json字符串转换成json对象的时候会出错,主要是双引号,回车换行等影响明显,左尖括号和右尖括号也会导致显示问 ...

  6. JavaScript:将key和value不带双引号的JSON字符串转换成JSON对象的方法

    遇到相关的问题,花了两天的时间来解决,深感来之不易,所以做如下的总结,希望遇到此问题的码农能更快的找到解决办法! var jsonArr= [{col:TO_CHAR(HZRQ,'YYYYMM'),t ...

  7. js将json字符串转化成json对象的方法

    js将json字符串转化成json对象的方法: JSON.parse(jsonObject)

  8. nodejs将JSON字符串转化为JSON对象

    如何将JSON字符串转化为JSON对象? JSON.parse(str)       JSON是javascript的一个内置对象,提供了转换JSON对象与字符串互相转换的方法: 问题来了,道理我都懂 ...

  9. json字符串转成 json对象 json对象转换成java对象

    import com.alibaba.fastjson.JSONArray;import com.alibaba.fastjson.JSONObject; 依赖包 <dependency> ...

随机推荐

  1. redux、immutablejs和mobx性能对比(一)

    一.前言 关于react的性能优化,有很多方面可以去做,而其中避免重复渲染又是比较重要的一点,那么为什么react会重复渲染,我们又该如何避免重复渲染呢,关于这方面官方其实早有说明:避免重复渲染,这里 ...

  2. JSON学习笔记-3

    JSON 对象 1.对象语法 JSON 对象使用在大括号({})中书写. 对象可以包含多个 key/value(键/值)对. key 必须是字符串,value 可以是合法的 JSON 数据类型(字符串 ...

  3. 【眼见为实】自己动手实践理解数据库READ UNCOMMITED && SERIALIZABLE

    目录 准备工作 ①准备测试表和测试数据 ②关闭数据库事务自动提交 ③设置InnoDB存储引擎隔离级别 [READ UNCOMMITTED] [READ UNCOMMITTED]能解决的问题 [READ ...

  4. 在虚拟机中安装ubuntu16.04后不能全屏显示

    一.在终端输入:xrandr 二.输入:xrandr -s 1920x1440 参考网站:https://blog.csdn.net/qq_33202928/article/details/75021 ...

  5. Fatal error: Can't use function return value in write context

    这个的出错原因很简单,先贴出错代码: <?php $contact = array("id"=>1, "姓名"=>"老高" ...

  6. 记录今天客户的SQLSERVER启动不起来( 错误9003)的解决过程2013-11-26

    记录今天客户的SQLSERVER启动不起来( 错误9003)的解决过程2013-11-26 今天一大早上班就接到客户的电话,说:SQLSERVER启动不起来,业务系统使用不了 于是我就使用QQ远程,帮 ...

  7. 我是如何将linux用在开发环境中的

    1.我为什么要写这篇文章 一直想深入学习一下linux的使用,于是将家里的笔记本装了linux系统,但是要将自己的系统打造一个适合开发的环境确实是一件费心费力的事,而且会经常出现一些莫名其妙的问题,以 ...

  8. 使用 Azure CLI 管理 Azure 磁盘

    Azure 虚拟机使用磁盘来存储 VM 操作系统.应用程序和数据. 创建 VM 时,请务必选择适用于所需工作负荷的磁盘大小和配置. 本教程介绍如何部署和管理 VM 磁盘. 学习内容: OS 磁盘和临时 ...

  9. springMVC入门-07

    删除功能实现,对应controller类中的代码如下所示: @RequestMapping(value="/{username}/delete",method=RequestMet ...

  10. asp.net使用一般处理程序实现文件下载

    首先有一个html页面,页面有一个链接,点击链接弹出文件下载/保存(类似迅雷下载链接) <!DOCTYPE html> <html> <head> <meta ...