0

jsonBuilder を使用してオブジェクトのマップを作成しようとしましたが、すでに数時間成功していません。私がやりたいのは、そのような json を作成して、オブジェクトを次のようにアドレス指定できるようにすることです: someJsonObject.elements.2. 目的の JSON は次のようになります (完全に正しい構文です)。

{
    "elements": {
        "1": {
            "id": 1,
            "x": 111
        },
        "2": {
            "id": 2,
            "x": 222
        },
        "3": {
            "id": 3,
            "x": 333
        }
    }
}

これまでのところ、このコードで得た最高の結果:

builder.elements() {
    elementList.each { Element e ->
        element( id : e.id, x : e.x )
        println "dodano"
    }
}

しかし、私が得るのは、私のjsonに印刷された1つの要素だけです:

{
    "elements": {
        "element": {
            "id": 3,
            "x": 333
        }
    }
}

たとえば、次のように、オブジェクトに動的に名前を付けることしかできなかったとします。

builder.elements() {
        elementList.each { Element e ->
            e.id( id : e.id, x : e.x )
            println "dodano"
        }
    }

しかし、それは私にエラーを与えます: メソッドの署名はありません: com.webwaver.website.Element.id() は引数の型に適用されます: (java.util.LinkedHashMap) 値: [[id:3, x:748]]

目的のjsonを取得する方法を知っている人はいますか?

編集:答えてくれてありがとう。これは非常に役立ちますが、メソッド呼び出し builder.elements() を使用できないため、まだ json の作成に問題があります。これは次のようになります。

{
    "data": {
        "lastPageNr": 1,
        "lastLanguageId": 1,
        "lastElementNr": 0,
        "websiteId": "nrpntf"
    },
    "elements": {
        "1": {
            "id": 1,
            "x": 111
        },
        "2": {
            "id": 2,
            "x": 222
        },
        "3": {
            "id": 3,
            "x": 333
        }
    }
}

何か案は?

4

1 に答える 1

1

これにより、必要な出力が得られます。

import groovy.json.*

def builder = new JsonBuilder()
builder.elements {
  "1" {
    id 1
    x  111
  }
  "2" {
    id 2
    x  222
  }
  "3" {
    id 2
    x  222
  }
}
println builder.toPrettyString()

したがって、リストベースのビルダーに必要なものは次のようなものです。

def elementList = [ [ id: 3, x:748 ], [ id: 4, x:222 ] ]
def builder = new JsonBuilder()
builder.elements {
  elementList.each { e ->
    "$e.id" {
      id e.id
      x  e.x
    }
  }
}
println builder.toPrettyString()

編集 -- 質問を変更した後:

def builder = new JsonBuilder()
builder {
  data {
    lastPageNr 1
    lastLanguageId 1
    lastElementNr 0
    websiteId 'nrpntf'
  }
  elements {
    elementList.each { e ->
      "$e.id" {
        id e.id
        x  e.x
      }
    }
  }
}
println builder.toPrettyString()
于 2013-02-22T11:41:39.480 に答える