2017-01-01 7 views
0

基本的に、私は何とかしてGroovyオブジェクトからJSONオブジェクトを作成したいと考えています。値が配列であるキーを持つオブジェクトを作成する

{ 
     "id": "asdfl469934623sdglsi3aqaq", 
     "displayName": "Some Lightbulb", 
     "value": "on" 
    } 

そしてcapabilitiesListは私にこれを与える:json.toPrettyString()はこの私に与え、この時点で

import groovy.json.* 

    // Imagine "handler" gets called somehow and an event gets passed to it. 
    def handler(event) { 
     def capabilitiesList = event.device.capabilities.findAll { attr -> attr.name != null } 
     def json = new JsonBuilder({ 
      id event.deviceId 
      displayName event.displayName 
      value event.value 
     }) 
    } 

    log.debug capabilitiesList 
    log.debug json.toPrettyString() 

:Groovyのオブジェクトは、キーと値のペアを持っている、との値のいずれかがGroovyの配列です

["Test 1", "Test 2", "Test 3"] 

capabilitiesList配列をGroovyオブジェクトに追加してJSONに変換するにはどうすればよいですか?

私は動作するようには思えません。仕事をする唯一のものはこれです:

私は、この(正しい)JSON出力できます
// ... 
    def json = new JsonBuilder({ 
     id event.deviceId 
     displayName event.displayName 
     value event.value 
     capabilitiesList "Test 1", "Test 2", "Test 3" 
    }) 
    // ... 

{ 
     "id": "asdfl469934623sdglsi3aqaq", 
     "displayName": "Some Lightbulb", 
     "value": "on", 
     "capabilitiesList": ["Test 1", "Test 2", "Test 3"] 
    } 

をしかし、それは、ハードコーディングされていますので、それは明らかに有用ではありません。

// ... 
    def capabilitiesList = event.device.capabilities.findAll { attr -> attr.name != null } 
    def json = new JsonBuilder({ 
     id event.deviceId 
     displayName event.displayName 
     value event.value 
     capabilitiesList capabilitiesList 
    }) 
    // ... 

しかし、それは何とかJsonBuilderを壊し、それは何も出力しません。だから私はこのように直接配列を参照してみました。

私はおそらく、ここでは本当にばかげていることをしていますが、これをどうやって行うのかは分かりません。 Groovyにも初めて。助けてくれてありがとう!

+0

、' capabilitiesList'秒の時間を使います。最初はJSONプロパティの名前として解釈されます。 2回目はJSONリストに変換されるGroovyリスト変数として解釈されます。 – BalRog

+0

申し訳ありませんが、それは私の間違いでした。上で説明したことをすると、 'toPrettyString()'に文字列を出力できません。 : – Titus

+0

Hmmmmここで何か変なことが起こっています。これを試してみてください:def capabilitiesListを宣言から 'List capabilitiesList'に変更し、何が起こるかを教えてください – BalRog

答えて

0

ビルダーを使用すると、DSLが機能するはずです。たとえば:

List list = ['Test1', 'Test2', 'Test3'] 

def builder = new groovy.json.JsonBuilder() 

builder { 
    id "asdfl469934623sdglsi3aqaq" 
    displayName "Some Lightbulb" 
    value "on" 
    capabilitiesList list 
} 

println builder.toPrettyString() 

プリント

代わりにあなたの最後のコードスニペットでcapabilities` `の
{ 
    "id": "asdfl469934623sdglsi3aqaq", 
    "displayName": "Some Lightbulb", 
    "value": "on", 
    "capabilitiesList": [ 
     "Test1", 
     "Test2", 
     "Test3" 
    ] 
} 
+0

答えてくれてありがとう!しかし、私の質問の例で 'event'変数の中にあるリストがあります。' builder'オブジェクトにプラグインしても機能しません。手動で定義すると、 'events'オブジェクトから渡されたリストを使用したいので、目的を全滅させます。 – Titus

関連する問題