2016-09-28 8 views
2

にランダムな名前の単一ノードのJSONの子供を取得し、私はそのようなアイテムの色を取得したい:(ないGrailsの)GroovyではGroovyの

{ 
    "8436": { 
     "color": "red", 
    } 
} 

「8436」の数は動的であるが、そこであります常に1つだけです。

数がハードコーディングされたことになるので、私は、JsonSlurperのjson.8436.color構文を使用することはできません。

どのように色を取得しますか?

答えて

4

別のオプション、与えられた:

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' 
1

あなたは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' 
+0

rootKeyの取得は素晴らしい最初のものです本当にステップ!私は、ファイル内のコードを入れて、それを実行すると残念ながら、私は 'メソッドのシグネチャません取得:(のjava.util.HashMap $ KeySet.getAt)の引数の型に適用されます:(java.lang.Integerの)値:[0]'心にこのポップにこのエラーに –

+0

幾つかの解決策:(1)セットの反復子のオフ最初の項目を選択: 'json.keySet()イテレータ()次の()'、(2)リストにセットを強制。 '([json.keySet()as List] [0]'、(3)空のリストで始まり、それにセットを追加してから前と同じようにインデックスを作成します: '([+] json.keySet()) [0]など、テーマには多くのバリエーションがあります。 – BalRog

+0

ところで、 'Iterable.getAt(int型)は' Groovyで定義されているので、 'java.util.HashMapを$ KeySet'がそれを認識しない理由を、そのクラスは、コレクション'経由で 'Iterable'を(実装しているので、私は、想像することはできません'、' Set'を使って)。これは私にはGroovyのバグだと思われますが、以前は間違っていました。 – BalRog

0

アップデート:(?もっと慣用)より良い方法

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 
+3

閉鎖内から閉鎖外の値を変更することは決して好きではありません: -/ –

+0

もちろん、それはいつもよりうまくいくはずです。ソリューションを更新しました... – KoW

関連する問題