前言:最近需要实现的任务是:写若干个接口,并且接口中的请求数据是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();         // 第二步获得的是JsonObjectHerdCamera 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的JsonObjectzoneGeometry.setType(subObject2.get("type").getAsString());       //然后获取zone_geometry内部的type对象JsonArray array2 = subObject2.getAsJsonArray("apex");           //第五步中apex是一个jsonArrayList<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中的映射就可以在前端获取到相关的数据。

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

转载于:https://www.cnblogs.com/xiaxj/p/9197496.html

如何解析json字符串及返回json数据到前端相关推荐

  1. java如何解析JSON字符串(复杂json解析详解)

    1.什么是JSON字符串? 我们在理解json的时候,不必要过分的扣json到底是哪几个字母的简称,要了解本质. JSON的本质就是字符串,字符串几乎所有的系统都支持,所以json的兼容性好. JSO ...

  2. json字符串转对象(json字符串转对象的方法)

    js中如何将一字符串表示的日期转换为Date对象? var a = "2006/12/1" d = new Date(a) <br/>写个json对象demo瞧一瞧,j ...

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

    json字符串转换成json对象,json对象转换成字符串,值转换成字符串,字符串转成值 原文:json字符串转换成json对象,json对象转换成字符串,值转换成字符串,字符串转成值 主要内容: 一 ...

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

    Json字符与Json对象的相互转换方式有很多,接下来将为大家一一介绍下,感兴趣的朋友可以参考下哈,希望可以帮助到你 1>jQuery插件支持的转换方式: 代码如下: $.parseJSON( ...

  5. oracle json字符串转数组,json字符串转化成json对象(原生方法)

    json字符串.json对象.数组 三者之间的转换 //json字符串.json对象.数组 三者之间的转换 let jsonStr = '[{"id":"01" ...

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

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

  7. php 请求url 返回json,php解析请求url并返回json数据

    paserRequest($_SERVER["QUERY_STRING"]); function paserRequest($strReq) { parse_str($strReq ...

  8. js json对象转字符串_Mock.js模拟数据实现前端独立开发

    在后端接口尚未完成时, 前端开发人员只能请求静态文件的方式来模拟数据, 非常繁琐, 使用mockjs, 我们可以对ajax请求进行拦截, 随机生成各种各样的数据, 包括图片, 非常方便, 由于实在肝不 ...

  9. PHP对Json字符串解码返回NULL的一般解决方案

    php对json字符串解码使用json_decode()函数,第一个参数传字符串,第二个参数若为true,返回array:若为false,返回object.如果返回NULL,说明报错,输出json_l ...

最新文章

  1. HttpWebRequest采集读取网站挂载Cookie的通用方法
  2. 运维利器1-supervisor
  3. 在运行期通过反射了解JVM内部机制
  4. java基础----Java Collections Framework
  5. Django中related_name的作用
  6. c语言库函数fgets,C语言 标准I/O库函数 fgets 使用心得
  7. 原生javascript淡入淡出焦点图 + Jquery实现方法
  8. 电脑开机,总需要按F1,是什么原因造成的?
  9. linux搜索word文档内容,在目录中搜索MS word文件以获取Linux中的特定内容
  10. 使用Magoshare for Mac无法打开恢复的文件或扫描后找不到丢失的文件怎么办?
  11. eXosip订阅问题分析
  12. python中dispatch_在django,dispatch的用途是什么?
  13. 进击的UI--------------- UITableViewUITableView的移动
  14. 怎样调整计算机显示屏窗口,电脑显示器怎么调节参数
  15. 蓝桥杯:魔方旋转问题【高职组】
  16. python输出随机字符串代码
  17. 计算机修改users用户名,笔记本电脑更改用户名_笔记本电脑更改user
  18. # 7-3 二分法求多项式单根
  19. javascript 45种缓动效果BY司徒正美
  20. python换零钱_Python算法之零钱兑换问题的解法

热门文章

  1. java重命名sheet失败_java jxl excel 数据导出 重新命名无效的工作表名称 | 学步园...
  2. linux 优雅重启进程,apache2 重启、停止、优雅重启、优雅停止
  3. 校园管理系统需求分析文档
  4. ecshop根目录调用_ecshop列表页 调用二级分类教程
  5. js中select下拉框重置_Web测试中需要注意的16个小细节
  6. Hadoop异常 hdfs.DFSClient: DataStreamer
  7. 【Heritrix基础教程之4】开始一个爬虫抓取的全流程代码分析
  8. slf4j+log4j2的整合配置
  9. 一次堆外OOM问题排查
  10. java自定义注解实现前后台参数校验