继续 json 系列:
- Java:找个好用的 json diff (未完待续)
- Java:org.skyscreamer.jsonassert.JSONCompare
- Java:fastjosn 判断是否 json 字符串的坑
上次说到fastjson JSON.isValid
判断是否 Json 字符串非预期,那用什么可以呢?
经验证,可以用 com.alibaba.fastjson.PATH.isValidObject("str")
和 PATH.isValidObject("str")
来判断,即使是 “0” 也不会像 PATH.isValid(“0”) 返回非预期的 true
。
这次再说下另外一个坑(当前最新版本1.2.75):
JSONPath.remove 的坑
比对 json 时,忽略某些字段,比较简单的方式是直接用 JSONPath 把这些字段从比对目标中剔除。这也是剔除过程中踩到的坑。
1 | { |
- 目标: 删除 phoneNumbers 数组中的对象的 type。
方法:
com.alibaba.fastjson.JSONPath.remove(Object root, String path)
参数 JSONPath:下述 JSONPath 虽然在 http://jsonpath.com/ 验证通过,但是
JSONPath.remove
却删除失败了。"$.phoneNumbers[:].type"
"$.phoneNumbers[*].type"
需要写成 "$.phoneNumbers[0:].type"
才可以。
附完整代码:
1 | String jsonStr = "{\n" + |
输出:
1 | ---------- before ---------- |
可以看到 phoneNumbers 数组中对象的 type 字段已被删除。
注:
JSON.toJSONString(jo, SerializerFeature.PrettyFormat)
实现格式化美化输出。