【工作代码】复杂 JSON 值替换处理
总结下最近的工作遇到的点:
入参复杂 JSON 层层嵌套,Java 怎么优雅的处理。
一、关于 JSON
JSON 是类似 XML 用于存储和交互文本信息。但优于 XML ,其更小,更快,更易懂和解析。其是一个无序的”名称/值”对的集合。由
|
1
2
3
4
5
|
{ 左括号"" 名称 String:值} 右括号 |
组成。然后 名称值对 以逗号分隔。

二、场景描述
是一个正则匹配替换的操作。一个很长很复杂的 JSON 入参,通过正则匹配其 content 对应的值中的图片地址并替换。
三、思考
框架选型 – fastjson
(fastjson 是一个性能很好的 Java 语言实现的 JSON 解析器和生成器,来自阿里巴巴的工程师开发。)
a . 思路
Java 是面向对象的语言。我要利用 fastjson 把复杂的 JSON 写出其对应的 BO 对象,然后正则替换 content 内容(即 operatorContent 方法),然后重新生成 JSON 响应。即下面代码操作:
|
1
2
3
|
OperatorBO operatorBO = JSON.parseObject(jsonString, OperatorBO.class);operatorBO.setContent(operatorContent(operatorBO.getContent()));String newJsonString = JSON.toJSONString(operatorBO); |
好处:代码易读,容易维护
坏处:BO 实在是太复杂,而且很多数组嵌数组。PHP -> Java 服务化过程中很多不可控,容易出 BUG。
涉及的API :
序列化对象到 JSON:
|
1
|
String jsonString = JSON.toJSONString(obj); |
反序列化 JSON 到对象:
|
1
|
VO vo = JSON.parseObject("...", VO.class); |
摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢!
b . 思路
只是替换操作,所以不用太考虑代码易读性。直接利用 fastjson 直接转出 JSONArray 对象,然后操作该对象即可。JSONArray 对象本质就是一个 List<Object> 如下代码:
|
1
2
3
4
|
public class JSONArray extends JSON { private final List<Object> list; protected transient Object relatedArray;} |
具体伪代码如下:
|
1
2
3
4
5
|
String jsonString = "[{" + "\"content\":\"content value 1\"" + "}]";JSONArray itemDataJsonArr = JSON.parseArray(jsonString);String content = itemDataJsonArr.getJSONObject(0).getString("content");content = content + "23";itemDataJsonArr.getJSONObject(0).put(CONTENT,content); |
好处:不用关心其他复杂的键值对,目标只关注要替换的节点名称。
坏处:代码不易读,相对也还容易维护。
涉及的API :
替换对应的节点名称的值:
|
1
|
JSONObject.put("...",value); |
反序列化 JSON 到 JSONArray 对象:
|
1
|
JSONArray jSONArray = JSON.parseObject("..."); |
思路 c d e …
四、小结
根据服务化场景,在不确定入参 JSON 的复杂度情况下,选择了思路 b.这篇其实是工作上的小小结。任何技术,任何框架的 API 是否好用优雅,是具体场景决定的。
如以上文章或链接对你有帮助的话,别忘了在文章结尾处评论哈~ 你也可以点击页面右边“分享”悬浮按钮哦,让更多的人阅读这篇文章。
【工作代码】复杂 JSON 值替换处理的更多相关文章
- python3.6从含有html代码的json的中取出某个值
python3.6从含有html代码的json的中取出某个值 之前在做接口测试的时候,网站的后端是用java写的,然后接口的response返回的都是json格式,json很简单,就是字典,类似这样子 ...
- bootstrap selectpicker 通过代码指定选中值 BootStrap selectpicker后台动态绑定数据 selectpicker 获取选中option的属性或者值
bootstrap-select使用 bootstrap selectpicker 通过代码指定选中值 $('#subjectno').selectpicker('val',(row.subjectn ...
- .net和MVC中的json值和List<T>和DataTable的一些转换
1.List<T>集合转换为Json值 List<ReportModel> dtList = new List<ReportModel>(); JsonResult ...
- 【SQL】Update中使用表别名、如何用表中一列值替换另一列的所有值
Update中使用表别名 select中的表别名: select * from TableA as ta update中的表别名: update ta from TableA as ta 如何用表中一 ...
- SQL SERVER将某一列字段中的某个值替换为其他的值 分类: MSSQL 2014-11-05 13:11 67人阅读 评论(0) 收藏
SQL SERVER将某一列字段中的某个值替换为其他的值 UPDATE 表名 SET 列名 = REPLACE(列名 ,'贷','袋') SQL SERVER"函数 replace 的参数 ...
- EasyUI - 一般处理程序 返回 Json值
使用 一般处理程序(ashx)返回Json值. 原始Json数组的格式: [ { ", "name":"张三", "sex":&q ...
- gcc -D 传值给代码,默认值为1
gcc -D 传值给代码,默认值为1 -D 参数可以给代码中的宏打开一扇门.简单的代码#include <stdio.h> #ifdef WHO #define NAME "jo ...
- mssql sqlserver 将字段null(空值)值替换为指定值的三种方法分享
摘要: 下文将分享两种将字段中null值替换为指定值的方法分享,如下所示: 实验环境:sqlserver 2008 R2 例: )) go insert into test(info)values(' ...
- data.frame类型数据如何将第一列值替换为行号
data.frame类型数据如何将第一列值替换为行号 row.names(data) <- data[, 1]data <- data[, -1]
随机推荐
- ConcurrentDictionary 对决 Dictionary+Locking
在 .NET 4.0 之前,如果我们需要在多线程环境下使用 Dictionary 类,除了自己实现线程同步来保证线程安全之外,我们没有其他选择. 很多开发人员肯定都实现过类似的线程安全方案,可能是通过 ...
- [MSSQL2012]LEAD函数
LEAD函数简单点说,就是把下一行的某列数据提取到当前行来显示,看示例更能解释清楚,先看测试用脚本 DECLARE @TestData TABLE( ID INT IDENTITY(1,1), ...
- PAAS平台的web应用性能测试与分析
引言 为什么我会写这一篇博客,因为最近很多京东云擎jae的用户反应一个问题就是他们部署在jae上面的应用访问很慢,有极少数应用甚至经常出现504超时现象,当然大家首先想到的是jae性能太差,这也是人之 ...
- atitit. applet 浏览器插件 控件 的环境,开发,提示总结o9o
atitit. applet 浏览器插件 控件 的环境,开发,提示总结o9o 1. 建立applet:: 1 2. Applet 码 1 3. Applet (awt)跟japplet (swing) ...
- paip.php 5.0 5.3 5.4 5.5 -6.0的新特性总结与比较
paip.php 5.0 5.3 5.4 5.5 -6.0的新特性总结与比较 PHP5的新特性 2 · 对象的参照过渡是默认的(default) 3 · 引入访问属性的限制 3 · 引入访问方法的限 ...
- Lucene.net入门学习(结合盘古分词)
Lucene简介 Lucene是apache软件基金会4 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,即它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整 ...
- XML入门级的简单学习
xml案例<?xml version="1.0" encoding="ISO-8859-1"?> <note> <to>Ge ...
- AStar算法(转载)
以下的文章来至http://blog.csdn.net/debugconsole/article/details/8165530,感激这位博主的翻译,可惜图片被和谐了,所以为方便阅读,我重新把图片贴上 ...
- 【锁】Oracle锁系列
[锁]Oracle锁系列 1 BLOG文档结构图 2 前言部分 2.1 导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~O(∩_∩)O~: ...
- javascript必须懂之冒泡事件
在学习javascript中,如果在事件的使用上出现一些反差效果,不良效果,如鼠标的移入移出时,显示你所需要的内容, 但就是没有出现,然而你不断的检查代码,逐个代码查错,还在浏览器的调试工具中调试都没 ...