使用 JsonSlurper 和未知“字符串”的 JSON 到 Groovy
Posted
技术标签:
【中文标题】使用 JsonSlurper 和未知“字符串”的 JSON 到 Groovy【英文标题】:JSON to Groovy with JsonSlurper and unknown "string" 【发布时间】:2012-06-19 03:05:10 【问题描述】:我正在编写一个 Grails/Groovy 应用程序,并且我在 params 中有一个带有“字符串”名称(grommet 和 widget)的 JSON 对象strong> 可以改变的成员。也就是说,下一次可能是 acme 和 zoom。这是 JSON:
def jx = """
"job": "42",
"params":
"grommet": "name": "x", "data": "y",
"widget": "name": "a", "data": "b"
"""
我正在尝试弄清楚如何获取字符串 grommet 。到目前为止的代码:
def dalist = new JsonSlurper().parseText(jx)
println dalist.job // Gives: 42
println dalist.params // Gives: [grommet:[name:x, data:y], widget:[name:a, data:b]]
println dalist.params[0] // Gives: null
知道如何获取字符串 grommet 吗? Iama 会一直把我的头撞到墙上。
【问题讨论】:
irb(main):001:0> rand(3) + 1 => 1 互联网已发言,选择答案 1。谢谢大家。 【参考方案1】:JSON 对象上的 params
键与 JSON 对象关联,而不是数组,因此您无法通过索引访问它。 JsonSlurper 将 JSON 对象映射到 Groovy Maps,因此您可以通过其键访问params
,这些键是字符串,例如dalist.params.grommet
,它会给你地图[name: 'x', data: 'y']
。
要访问params
上的密钥,您可以执行dalist.params.keySet()
,这将为您提供['grommet', 'widget']
列表。如果您只想知道params
键,那应该可以解决问题。如果您出于某种原因需要获取'grommet'
字符串,您可以通过访问该列表中的第一个元素来完成,即dalist.params.keySet()[0]
,但我不知道您为什么想知道这一点。而且我不确定是否保证该映射的第一个键将始终为'grommet'
,因为 JSON 对象未按规范排序(来自json.org:对象是一组无序的名称/值对),但反过来,Groovy 映射 是有序的(默认实现是 LinkedHashMap)...所以我假设在将 JSON 解析到 Groovy 世界时会保留顺序,但我会尽量不要依赖这种特定的行为,呵呵。
【讨论】:
我再次查看了 api,因为我认为它返回了 Object(doh!)并且没有看到它返回了列表和地图。感谢您的回答。【参考方案2】:是Map
实例,试试:
def params = dalist.params.entrySet() as List // entrySet() returns Set, but it's easier to use it as a List
println params
println params.size()
println params[0]
println params[0].key
println params[0].value
【讨论】:
【参考方案3】:这可能会对你有所帮助。
import groovy.json.JsonSlurper;
def jx='"job":"42","params":"grommet":"name":"x","data":"y","widget":"name":"a","data":"b"'
def dalist = new JsonSlurper().parseText( jx )
assert dalist.params.getClass().name == "java.util.HashMap";
assert dalist.params.size() == 2;
def keys = dalist.params.collect a, b -> a; // returns "[grommet, widget]"
assert !!dalist.params.get( "grommet" ) == true
【讨论】:
谢谢,这是我认为我应该能够做到的。现在我该选择哪一张支票?所有三个答案都在标记上。 @rtfminc 你可以对这三个都投赞成票,然后随机选择一个。以上是关于使用 JsonSlurper 和未知“字符串”的 JSON 到 Groovy的主要内容,如果未能解决你的问题,请参考以下文章