一、背景

最近领导新给了一个需求,需要前台传一段正确的json串,经过解析以后能把层级关系正确的存入数据库。先看看前端成果物:

二、需求分析

1、要求是一段正确的json串(符合json格式的字符串),所以要考虑用户可能输入任意的字符串 => 所以需要对输入的字符串进行捕获,不符合的情况下弹出警告框提示用户。

2、对于符合json格式的字符串怎么去格式化校验,是一个难题。如果不借助官方现成的工具,当时想到的是通过字符串中的 { 和 [ 去分析层级关系,没遇到 { 或 [ 层级关系就应该递加一层,没遇到 } 或 ] 就减少一层。但是其中有很多细节是需要考究的,比如在json串的键值对中,可能会出现  "list": []        "name": {}        "list": [{}] 这种情况,此时去递加层级关系大可不必!下面是我的一些思路,当时有根据这个思路做了几版代码。但是最终都没有完美的实现!有兴趣的可以参考或者指出问题一起探讨,哈哈哈哈哈哈

 public void commonJSONParse(String jsonStr) {char[] specialArr = { '\'', '"', '\\' }; //包含此类字符时,不执行逻辑List<Character> specialList = CollectionUtils.arrayToList(specialArr);int level = 0;Map<Integer, Integer> map = new TreeMap<>(); //key储存索引,value储存层级关系char[] charArr = jsonStr.toCharArray();for (int i = 0; i < charArr.length; i++) {char cunrretChar = charArr[i];int index = specialList.indexOf(Character.valueOf(cunrretChar));if (index == -1) {switch (cunrretChar) {case '{':map.put(i, ++level);break;case '}':map.put(i, level--);break;case '[':map.put(i, ++level);break;case ']':map.put(i, level--);break;default:break;}}}for (Integer key : map.keySet()) {System.out.println(key + ": " + map.get(key) + "=>" + jsonStr.charAt(key.intValue()));}for (Integer key : map.keySet()) {}}

3、解决办法

最终在网上是发现了一个现成方法可以进行json串的格式化校验

formatJson() {try {//jptextarea是文本框的值,用于接收你写入的json串//JSON.stringify()通过设置第二第三参数值可以到达校验的目的//第三个参数决定校验后的空格数//需要注意的是文本框中只是一个符合json格式的字符串,所以必须先经过JSON.parse()解析为//对象才能调用JSON.stringifythis.jPTextarea = JSON.stringify(JSON.parse(this.jPTextarea), null, 4);} catch (error) {console.error(error);this.showCommonAlert("JSON格式错误!请规范!");}},

三、后端实现

以上是js实现方式,后端实现方式也写了几个版本,但是最后发现还是递归比较好用。没想到有更好的方式,因为json串里的层级关系可以无限嵌套,第一时间想到的就是递归来做。递归的话,说下我的思路:

1、根据json串首字母是 { 或 [ 来判断此json串本质是一个集合类型还是对象类型。

2、对象类型使用阿里巴巴的fastjson包下的JSONObject.parse()解析,解析后返回的是一个可以转成map类型的Object对象;同理JSONArray.parse()用于解析集合也是。

3、通过JSONArray.parse()返回可以转成JSONArray类型的对象后,在循环拿取里面的JSONObject类型的对象,所以不管是集合还是对象类型,最终都可以转成对象类型来做。

4、递归的条件就是,每次碰上JSONObject就执行递归,因为后端逻辑不一样,这里就不附上代码!

简单的JSON解析工具相关推荐

  1. Json解析工具Jackson(使用注解)

    接上一篇文章Json解析工具Jackson(简单应用),jackson在实际应用中给我们提供了一系列注解,提高了开发的灵活性,下面介绍一下最常用的一些注解 @JsonIgnoreProperties ...

  2. JSON解析工具比较,主要GSON和FastJSON

    转自:http://www.cnblogs.com/kunpengit/p/4001680.html 一 .各个JSON技术的简介和优劣 1.json-lib json-lib最开始的也是应用最广泛的 ...

  3. json解析工具(json解析工具 python)

    常用的xml,json解析工具有哪些 1.定义介绍 (1).XML定义 扩展标记语言 (Extensible Markup Language, XML) ,用于标记电子文件使其具有结构性的标记语言,可 ...

  4. FastJson快速上手【Json解析工具】

    目录 一.spring boot工程中引入FastJson依赖 二.调用JSON类的静态方法直接进行json序列化和反序列化 2.1 序列化 2.2 反序列化 三.快速演示: 四.思考 五.web案例 ...

  5. java 自定义json解析注解 复杂json解析 工具类

    java 自定义json解析注解 复杂json解析 工具类 目录 java 自定义json解析注解 复杂json解析 工具类 1.背景 2.需求-各式各样的json 一.一星难度json[json对象 ...

  6. 自己动手实现一个简单的JSON解析器

    1. 背景 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.相对于另一种数据交换格式 XML,JSON 有着诸多优点.比如易读性更好,占用空间更少等.在 ...

  7. json string 格式_自己动手实现一个简单的JSON解析器

    作者:田小波 原文:http://cnblogs.com/nullllun/p/8358146.html 1. 背景 JSON(JavaScript Object Notation) 是一种轻量级的数 ...

  8. 一文吃透Json解析工具类合集(FastJson、Jackson、Gson)

    Json解析工具类 前言 一.各个JSON技术的简介 1.1 FastJson角色 1.2 Jackson角色 1.3 Gson角色 二.使用步骤 2.1 引入库 1.FastJson依赖 2.Jac ...

  9. 一个简单的json解析器

    实现一个简单地json解析器. 两部分组成,词法分析.语法分析 词法分析 package com.mahuan.json;import java.util.LinkedList; import jav ...

  10. Java:JSON解析工具-org.json

    一.简介 org.json是Java常用的Json解析工具,主要提供JSONObject和JSONArray类,现在就各个类的使用解释如下. 二.准备 1.在使用org.json之前,我们应该先从该网 ...

最新文章

  1. Raspberry Pi 4B 循迹模块
  2. Android --- Retrofit 之 Okhttp3 网络请求总是调用 onFailure 方法,而不调用 onResponse,报错 timeout。
  3. arraylist是如何扩容的?_ArrayList的源码分析
  4. 作者:陶克(1988-),男,博士,北京系统工程研究所助理研究员。
  5. 解决Execution failed for task ':app:clean'. Unable to delete directory问题
  6. Linux Ubuntu 内核升级
  7. iOS -- SKTransition类
  8. 微信支付(PC扫码支付和H5公众号支付)
  9. 利用EQSecure E盾预防流氓软体
  10. jmeter接口自动化
  11. 概率论与数理统计——常用结论
  12. IP签名档HTML版本源码 显示精准定位
  13. CS大作业--程序人生--Hello‘s P2P
  14. 天蝎座2019年4月运势
  15. 论文阅读 Learning Motion in Feature Space: Locally-Consistent Deformable Convolution Networks
  16. python分类器分5类_Python机器学习之K近邻分类器
  17. 【JZOJ B组】【JSOI2013】吃货JYY
  18. ajax+JS实现分页
  19. Typora+PicGo+Gitee
  20. 企业数据治理之主数据管理

热门文章

  1. 破解极域电子教室密码
  2. java jpg转换成pdf格式_Java pdf和jpg互转案例
  3. 软件测试职业比赛,我院首届软件测试职业技能大赛圆满落幕
  4. ucinet计算聚类系数大于1怎么办_ucinet软件解释对照
  5. creator qt 字体太小_QtCreator的一些自定义代码字体和颜色
  6. Perl脚本使用小总结
  7. 2022亚太杯数学建模比赛准备
  8. MLDN学习笔记 —— Annotation
  9. 2021WordPress转z-blog搬家教程_WordPress搬家zblog博客程序工具
  10. 蓝桥杯网站试题练习系统网站,想拿国奖就靠它