Groovy中解析带注释JSON5对象的可行方案咨询
在Groovy中解析JSON5的可行方案
一、用Java的JSON5库(最靠谱的方案)
Groovy本身兼容Java生态,直接用成熟的JSON5 Java库就行,官方的org.json5:json5就很好用。
1. 添加依赖
如果用Gradle,在build.gradle里加:
dependencies { implementation 'org.json5:json5:1.0.1' // 记得用最新版本 }
Maven项目的话,在pom.xml里加:
<dependency> <groupId>org.json5</groupId> <artifactId>json5</artifactId> <version>1.0.1</version> </dependency>
2. 编写解析代码
直接上示例:
import org.json5.JSONObject def json5Content = ''' { // 这是单行注释 "A":"123", /* 这是多行注释 */ "B":"456" } ''' // 解析JSON5 JSONObject jsonObj = JSONObject.parse(json5Content) // 直接取值 def a = jsonObj.getString("A") def b = jsonObj.getString("B") println "A的值:$a,B的值:$b"
要是想转成Groovy常用的Map来操作,也可以转一下:
import groovy.json.JsonSlurper import org.json5.JSONObject def json5Str = '''{ // 行内注释 "A":"123", "B":"456" }''' JSONObject json5Obj = JSONObject.parse(json5Str) // 转成Groovy Map def groovyMap = new JsonSlurper().parseText(json5Obj.toString()) println groovyMap.A // 输出123
二、临时方案:手动移除注释再解析
如果不想加第三方库,可以自己写个简单的注释清理逻辑,但注意只适合简单场景——要是字符串里出现类似"content://something"这种带//的内容,会误处理。
示例代码:
def stripJsonComments(String json5Text) { // 删掉单行注释 def noLineComments = json5Text.replaceAll(/(?<!["\\])\/\/.*/, '') // 删掉多行注释 def noBlockComments = noLineComments.replaceAll(/(?<!["\\])\/\*[\s\S]*?\*\//, '') // 清理多余空行 return noBlockComments.replaceAll(/^\s*\n/, '') } def rawJson5 = ''' { // 单行注释 "A":"123", /* 多行注释 第二行 */ "B":"456" } ''' // 清理后得到标准JSON def cleanJson = stripJsonComments(rawJson5) // 用Groovy自带的JsonSlurper解析 def result = new groovy.json.JsonSlurper().parseText(cleanJson) println result.B // 输出456
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

