json - 如何使用 groovy 获取确切的 json 节点实例?

标签 json groovy types

输入 JSON文件:

{
   "menu": {
     "id": "file",
     "value": "File",
     "popup": {
          "menuitem": [
               {
                   "value": "New", 
                   "onclick": ["CreateNewDoc()","hai"],
                   "newnode":"added"
               }
          ]
      }
  }
}

常规代码:

def newjson = new JsonSlurper().parse(new File ('/tmp/test.json'))
def value=newjson.menu.popup.menuitem.value
def oneclick=newjson.menu.popup.menuitem.onclick
println value
println value.class
println oneclick
println oneclick.class

输出:

[New]
class java.util.ArrayList
[[CreateNewDoc(), hai]]
class java.util.ArrayList

这里,
携带String和List的json节点返回与上面groovy代码相同的类名。

  • 我如何区分节点 valueoneclick。从逻辑上讲,我希望 value 应该是 String 的实例。但两者都以 ArrayList 形式返回。

  • 如何使用groovy获取json中节点的确切类型。

更新 1:

我不太清楚,可以像下面那样做。我期望得到这样的结果,

New
class java.util.String
[CreateNewDoc(), hai]
class java.util.ArrayList

最佳答案

给你:

  • 在下面的脚本中使用闭包来显示每个值及其类型的详细信息
  • 另一个闭包用于显示 menuitem 列表中的每个 map 。
def printDetails = { key, value -> println "Key - $key, its value is \"${value}\" and is of typpe ${value.class}" }

def showMap = { map -> map.collect { k, v -> printDetails (k,v) } }

def json = new groovy.json.JsonSlurper().parse(new File('/tmp/test.json'))
def mItem = json.menu.popup.menuitem
if (mItem instanceof List) {
   mItem.collect { showMap it  }
}
println 'done'

您可以快速在线尝试相同的 demo

关于json - 如何使用 groovy 获取确切的 json 节点实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48321669/

相关文章:

javascript - Angular JSON 与 JSONP $promise

java - 将动态 XML/JSON 内容与静态标记化负载进行比较并检索标记值

typescript - 有没有办法在 typescript 定义中引用函数参数?

javascript - 将 JS 数组转换为对象

javascript - json.data.totalItems == 0 不起作用

grails - 在grails中使用HTTP GET调用时,字段值呈现为空

jenkins - Groovy - Jenkins 管道 - Groovy CPS 不通过 .each Line 方法

groovy - 在groovy中生成随机日期

typescript - 使用新的定义文件添加到现有库 typescript 类型

c++ - void* 作为通用引用类型如何工作?