にランダムな名前の単一ノードのJSONの子供を取得し、私はそのようなアイテムの色を取得したい:(ないGrailsの)GroovyではGroovyの
{
"8436": {
"color": "red",
}
}
「8436」の数は動的であるが、そこであります常に1つだけです。
数がハードコーディングされたことになるので、私は、JsonSlurperのjson.8436.color
構文を使用することはできません。
どのように色を取得しますか?
にランダムな名前の単一ノードのJSONの子供を取得し、私はそのようなアイテムの色を取得したい:(ないGrailsの)GroovyではGroovyの
{
"8436": {
"color": "red",
}
}
「8436」の数は動的であるが、そこであります常に1つだけです。
数がハードコーディングされたことになるので、私は、JsonSlurperのjson.8436.color
構文を使用することはできません。
どのように色を取得しますか?
別のオプション、与えられた:
def jsonStr = '''{
"8436": {
"color": "red",
}
}'''
あなたが行うことができます:
import groovy.json.JsonSlurper
def json = new JsonSlurper().parseText(jsonStr)
def (rootKey, color) = json.findResult { k, v -> [k, v.color] }
assert rootKey == '8436'
assert color == 'red'
あなたはJSON入力の構造について少し知っているので、あなたはルートが一つのキーが含まれているマップであるという事実を利用することができます。
import groovy.json.JsonSlurper
def json = new JsonSlurper().parseText('{"8436":{"color":"red"}}')
def rootKey = json.keySet()[0]
assert rootKey == '8436'
assert json[rootKey].color == 'red'
アップデート:(?もっと慣用)より良い方法
import groovy.json.JsonSlurper
def jsonStr = """
{
"8436": {
"color": "red",
}
}
"""
def json = new JsonSlurper().parseText(jsonStr)
def color = json.each {}.collect{it.value.color}[0]
println color
このよう
閉鎖、外部変数に格納し=======古いバージョン、=======
このような何かではない理由:
import groovy.json.JsonSlurper
def jsonStr = """
{
"8436": {
"color": "red",
}
}
"""
def json = new JsonSlurper().parseText(jsonStr)
def color
json.each { color = it.value.color}
println color
閉鎖内から閉鎖外の値を変更することは決して好きではありません: -/ –
もちろん、それはいつもよりうまくいくはずです。ソリューションを更新しました... – KoW
rootKeyの取得は素晴らしい最初のものです本当にステップ!私は、ファイル内のコードを入れて、それを実行すると残念ながら、私は 'メソッドのシグネチャません取得:(のjava.util.HashMap $ KeySet.getAt)の引数の型に適用されます:(java.lang.Integerの)値:[0]'心にこのポップにこのエラーに –
幾つかの解決策:(1)セットの反復子のオフ最初の項目を選択: 'json.keySet()イテレータ()次の()'、(2)リストにセットを強制。 '([json.keySet()as List] [0]'、(3)空のリストで始まり、それにセットを追加してから前と同じようにインデックスを作成します: '([+] json.keySet()) [0]など、テーマには多くのバリエーションがあります。 – BalRog
ところで、 'Iterable.getAt(int型)は' Groovyで定義されているので、 'java.util.HashMapを$ KeySet'がそれを認識しない理由を、そのクラスは、コレクション'経由で 'Iterable'を(実装しているので、私は、想像することはできません'、' Set'を使って)。これは私にはGroovyのバグだと思われますが、以前は間違っていました。 – BalRog