简单的JSON解析工具
一、背景
最近领导新给了一个需求,需要前台传一段正确的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解析工具相关推荐
- Json解析工具Jackson(使用注解)
接上一篇文章Json解析工具Jackson(简单应用),jackson在实际应用中给我们提供了一系列注解,提高了开发的灵活性,下面介绍一下最常用的一些注解 @JsonIgnoreProperties ...
- JSON解析工具比较,主要GSON和FastJSON
转自:http://www.cnblogs.com/kunpengit/p/4001680.html 一 .各个JSON技术的简介和优劣 1.json-lib json-lib最开始的也是应用最广泛的 ...
- json解析工具(json解析工具 python)
常用的xml,json解析工具有哪些 1.定义介绍 (1).XML定义 扩展标记语言 (Extensible Markup Language, XML) ,用于标记电子文件使其具有结构性的标记语言,可 ...
- FastJson快速上手【Json解析工具】
目录 一.spring boot工程中引入FastJson依赖 二.调用JSON类的静态方法直接进行json序列化和反序列化 2.1 序列化 2.2 反序列化 三.快速演示: 四.思考 五.web案例 ...
- java 自定义json解析注解 复杂json解析 工具类
java 自定义json解析注解 复杂json解析 工具类 目录 java 自定义json解析注解 复杂json解析 工具类 1.背景 2.需求-各式各样的json 一.一星难度json[json对象 ...
- 自己动手实现一个简单的JSON解析器
1. 背景 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.相对于另一种数据交换格式 XML,JSON 有着诸多优点.比如易读性更好,占用空间更少等.在 ...
- json string 格式_自己动手实现一个简单的JSON解析器
作者:田小波 原文:http://cnblogs.com/nullllun/p/8358146.html 1. 背景 JSON(JavaScript Object Notation) 是一种轻量级的数 ...
- 一文吃透Json解析工具类合集(FastJson、Jackson、Gson)
Json解析工具类 前言 一.各个JSON技术的简介 1.1 FastJson角色 1.2 Jackson角色 1.3 Gson角色 二.使用步骤 2.1 引入库 1.FastJson依赖 2.Jac ...
- 一个简单的json解析器
实现一个简单地json解析器. 两部分组成,词法分析.语法分析 词法分析 package com.mahuan.json;import java.util.LinkedList; import jav ...
- Java:JSON解析工具-org.json
一.简介 org.json是Java常用的Json解析工具,主要提供JSONObject和JSONArray类,现在就各个类的使用解释如下. 二.准备 1.在使用org.json之前,我们应该先从该网 ...
最新文章
- Raspberry Pi 4B 循迹模块
- Android --- Retrofit 之 Okhttp3 网络请求总是调用 onFailure 方法,而不调用 onResponse,报错 timeout。
- arraylist是如何扩容的?_ArrayList的源码分析
- 作者:陶克(1988-),男,博士,北京系统工程研究所助理研究员。
- 解决Execution failed for task ':app:clean'. Unable to delete directory问题
- Linux Ubuntu 内核升级
- iOS -- SKTransition类
- 微信支付(PC扫码支付和H5公众号支付)
- 利用EQSecure E盾预防流氓软体
- jmeter接口自动化
- 概率论与数理统计——常用结论
- IP签名档HTML版本源码 显示精准定位
- CS大作业--程序人生--Hello‘s P2P
- 天蝎座2019年4月运势
- 论文阅读 Learning Motion in Feature Space: Locally-Consistent Deformable Convolution Networks
- python分类器分5类_Python机器学习之K近邻分类器
- 【JZOJ B组】【JSOI2013】吃货JYY
- ajax+JS实现分页
- Typora+PicGo+Gitee
- 企业数据治理之主数据管理