2017-03-05 11 views
1

私はgroovyにちょうど二日です。以下の構造でjsonファイルを解析する必要があります。私の実際のアイデアは、私は別の配列に基づいて異なる環境でのジョブのセットを実行する必要があるので、私は、私が解析するスクリプトの下にしようとした私のグルーヴィーJSONをGroovyスクリプト(JSONSlurperを使用)を使用して解析します。

{ 
    "services": [{ 
     "UI-Service": [{ 
      "file-location": "/in/my/server/location", 
      "script-names": "daily-batch,weekly-batch,bi-weekly-batch", 
      "seq1": "daily-batch,weekly-batch", 
      "seq2": "daily-batch,weekly-batch,bi-weekly-batch", 
      "DEST-ENVT_seq1": ["DEV1", "DEV2", "QA1", "QA2"], 
      "DEST-ENVT_seq2": ["DEV3", "DEV4", "QA3", "QA4"] 
     }] 
    }, { 
     "Mobile-Service": [{ 
      "file-location": "/in/my/server/location", 
      "script-names": "daily-batch,weekly-batch,bi-weekly-batch", 
      "seq1": "daily-batch,weekly-batch", 
      "seq2": "daily-batch,weekly-batch,bi-weekly-batch", 
      "DEST-ENVT_seq1": ["DEV1", "DEV2", "QA1", "QA2"], 
      "DEST-ENVT_seq2": ["DEV3", "DEV4", "QA3", "QA4"] 
     }] 
    }] 
} 

への入力ファイルとして、JSONのこのフォーマットを思い付いJSON

私が最初にすべてのサービスを読み取る必要がある
 def jsonSlurper = new JsonSlurper() 
     //def reader = new BufferedReader(new InputStreamReader(new FileInputStream("in/my/location/config.json"),"UTF-8")) 
     //def data = jsonSlurper.parse(reader) 
     File file = new File("in/my/location/config.json") 
     def data = jsonSlurper.parse(file) 

     try{ 
      Map jsonResult = (Map) data; 
      Map compService = (Map) jsonResult.get("services"); 
      String name = (String) compService.get("UI-Service"); 
      assert name.equals("file-location"); 

     }catch (E){ 
      println Exception 
     } 

(UI-サービス、モバイルサービス、など。)その後、その要素とJsonParserオブジェクトから読み取るための彼らの価値

答えて

2

例:

def data = jsonSlurper.parse(file) 
data.services.each{ 
    def serviceName = it.keySet() 
    println "**** key:${serviceName} ******" 
    it.each{ k, v -> 
     println "element name: ${k}, element value: ${v}" 
    } 
} 

その他のオプション:

println data.services[0].get("UI-Service")["file-location"] 
println data.services[1].get("Mobile-Service").seq1 
3

それとも、何か行うことができます:

new JsonSlurper().parseText(jsonTxt).services*.each { serviceName, elements -> 
    println serviceName 
    elements*.each { name, value -> 
     println " $name = $value" 
    } 
} 

をしかし、それはあなたが望むによって異なります(とあなたが本当に問題では説明しません)

+0

ユーザーから、データを取得する必要があることに基づいて、入力としてENVT名(例:DEV2またはQA3)のみを取得しています。#1 - どのDEST-ENVT_seqグループに属しているかを調べる必要があります(例:DEST-ENVT_seq2)。グループ名に基づいて私はfiにする必要がありますseq(ex:seq2)を見つけ、それらのファイルをfile-locationからコピーして実行する – Mowgli

関連する問題