使用 Groovy 获取 JSON 对象中的值类型
Get type of value within JSON object using Groovy
我想检查以下 JSON 对象
import groovy.json.JsonSlurper
def jsonSlurper = new JsonSlurper()
import groovy.json.JsonOutput;
def object = jsonSlurper.parseText '''
{
"id" : 10,
"docType" : "PDF",
"values" : {
"color" : "red",
"pages" : 2,
},
"versions" : [
{
"verNum" : 1,
"desc" : "This is the description for it"
}
]
}
'''
// def data = new JsonSlurper().parseText("""[{"a": 1, "b": 2, "c": 3, "x": true}, {"a": 4, "b": 5, "c": 6, "d": "Hello"}]""")
// def content = object.collectEntries{
// it.collectEntries{
// [it.key, it.value.class.name]
// }
//}
//println content
我想遍历每个键并使用 Groovy 检查类型,例如:
id - java.lang.Integer, docType - java.lang.String, values.color - java.lang.String, array 中对象内的 verNum 将为 java.lang.Integer
我已经搜索了几种不同的方法,但大多数方法都不适用于我的情况。其中一个现在在上面的代码中被评论了。
如有任何建议,我们将不胜感激!
我认为您应该在示例中使用数据变量而不是对象。
def data = new JsonSlurper().parseText("""[{"a": 1, "b": 2, "c": 3, "x": true}, {"a": 4, "b": 5, "c": 6, "d": "Hello"}]""");
def content = data.collectEntries{
it.collectEntries{
[it.key, it.value.class.name];
}
}
println content;
输出将是;
[a:java.lang.Integer, b:java.lang.Integer, c:java.lang.Integer, x:java.lang.Boolean, d:java.lang.String]
像这样:
import groovy.json.JsonSlurper
def object = new JsonSlurper().parseText '''
{
"id" : 10,
"docType" : "PDF",
"values" : {
"color" : "red",
"pages" : 2,
},
"versions" : [
{
"verNum" : 1,
"desc" : "This is the description for it"
}
]
}
'''
def res = [:]
def traverser
traverser = { Map m ->
m.each{ k, v ->
switch( v ){
case Map:
res[ k ] = Map
traverser v
break
case List:
res[ k ] = List
v.each traverser
break
default:
res[ k ] = v?.getClass()
}
}
}
traverser object
def simple = res.collectEntries{ k, v -> [ k, v.simpleName ] }
assert simple.toString() == '[id:Integer, docType:String, values:Map, color:String, pages:Integer, versions:List, verNum:Integer, desc:String]'
我想检查以下 JSON 对象
import groovy.json.JsonSlurper
def jsonSlurper = new JsonSlurper()
import groovy.json.JsonOutput;
def object = jsonSlurper.parseText '''
{
"id" : 10,
"docType" : "PDF",
"values" : {
"color" : "red",
"pages" : 2,
},
"versions" : [
{
"verNum" : 1,
"desc" : "This is the description for it"
}
]
}
'''
// def data = new JsonSlurper().parseText("""[{"a": 1, "b": 2, "c": 3, "x": true}, {"a": 4, "b": 5, "c": 6, "d": "Hello"}]""")
// def content = object.collectEntries{
// it.collectEntries{
// [it.key, it.value.class.name]
// }
//}
//println content
我想遍历每个键并使用 Groovy 检查类型,例如: id - java.lang.Integer, docType - java.lang.String, values.color - java.lang.String, array 中对象内的 verNum 将为 java.lang.Integer
我已经搜索了几种不同的方法,但大多数方法都不适用于我的情况。其中一个现在在上面的代码中被评论了。
如有任何建议,我们将不胜感激!
我认为您应该在示例中使用数据变量而不是对象。
def data = new JsonSlurper().parseText("""[{"a": 1, "b": 2, "c": 3, "x": true}, {"a": 4, "b": 5, "c": 6, "d": "Hello"}]""");
def content = data.collectEntries{
it.collectEntries{
[it.key, it.value.class.name];
}
}
println content;
输出将是;
[a:java.lang.Integer, b:java.lang.Integer, c:java.lang.Integer, x:java.lang.Boolean, d:java.lang.String]
像这样:
import groovy.json.JsonSlurper
def object = new JsonSlurper().parseText '''
{
"id" : 10,
"docType" : "PDF",
"values" : {
"color" : "red",
"pages" : 2,
},
"versions" : [
{
"verNum" : 1,
"desc" : "This is the description for it"
}
]
}
'''
def res = [:]
def traverser
traverser = { Map m ->
m.each{ k, v ->
switch( v ){
case Map:
res[ k ] = Map
traverser v
break
case List:
res[ k ] = List
v.each traverser
break
default:
res[ k ] = v?.getClass()
}
}
}
traverser object
def simple = res.collectEntries{ k, v -> [ k, v.simpleName ] }
assert simple.toString() == '[id:Integer, docType:String, values:Map, color:String, pages:Integer, versions:List, verNum:Integer, desc:String]'