2017-01-06 19 views
0

JSON文字列から特定の値を取得する方法:私はJSON文字列以下のように持って

{ 
"VCAP_SERVICES": { 
    "amazon-s3": [ 
     { 
     "credentials": { 
       "accesskey": "somevalue", 
       "bucketname": "somevalue1" 
      } 
      "name": "foo" 
     }, 
     { 
     "credentials": { 
       "accesskey": "someothervalue", 
       "bucketname": "someothervalue1" 
      } 
      "name": "bar" 
     } 
    ] 
    } 
} 

私は以下のようにそれを解析しています:

import org.codehaus.groovy.grails.web.json.JSONObject 
import grails.converters.JSON 
JSONObject myJson = JSON.parse(myString) 

私は値を配置したいと思いますaccesskeyと異なる変数でfoobarの両方のためのbucketname

def foo_accesskey = null 
def foo_bucketname = null 
def bar_accesskey = null 
def bar_bucketname = null 

私が動作していないようです、次の試してみました:

myJson["amazon-s3"].each {id, data -> 
    if (id == "foo") { 
     foo_accesskey = myJson["amazon-s3"]["credentials"]["accesskey"] 
     foo_bucketname = myJson["amazon-s3"]["credentials"]["bucketname"] 
    } 
    else if (id == "bar") { 
     bar_accesskey = myJson["amazon-s3"]["credentials"]["accesskey"] 
     bar_bucketname = myJson["amazon-s3"]["credentials"]["bucketname"] 
    } 
} 
+0

myJson ["amazon-s3:credentials:accesskey"]のようなものを試しましたか? –

答えて

0

あなたのJSON文字列が悪いですが、あなたは資格証明書と名前の間にコンマが必要です。 これを使用したGroovyConsoleは、要素のアドレス指定方法を示しています。

def jsonStr = '{"VCAP_SERVICES": {"amazon-s3": [{"credentials": {"accesskey": "somevalue","bucketname": "somevalue1"},"name": "foo"},{"credentials": {"accesskey": "someothervalue","bucketname": "someothervalue1"},"name": "bar"}]}}' 

def json = grails.converters.JSON.parse(jsonStr) 
println json.toString() 
println "-----" 
def foo_ac 
def foo_bu 
def bar_ac 
def bar_bu 
json.VCAP_SERVICES."amazon-s3".each { 
    println "it: ${it}" 
    println "-----" 
    if (it.name == 'foo') { 
     foo_ac = it.credentials.accesskey 
     foo_bu = it.credentials.bucketname 
    } 
    if (it.name == 'bar') { 
     bar_ac = it.credentials.accesskey 
     bar_bu = it.credentials.bucketname 
    } 
} 
println "foo_ac: ${foo_ac}" 
println "foo bu: ${foo_bu}" 
println "bar ac: ${bar_ac}" 
println "bar bu: ${bar_bu}" 
関連する問題