4

次のように保存関数に渡されるjsonオブジェクトがあります

{
  "markings": {
      "headMarkings": "Brindle",
      "leftForeMarkings": "",
      "rightForeMarkings": "sock",
      "leftHindMarkings": "sock",
      "rightHindMarkings": "",
      "otherMarkings": ""
}

** 編集 **

システムはそれを解析し、マッピングとして関数に渡します。私は実際には JSON を持っていません。JSON を自分で構築するのは難しくありませんが、やり過ぎのように思えます。

*編集終了**

関数は最終toString()的に結果をデータベースに入れます

"[rightForeMarkings:, otherMarkings:, leftForeMarkings:sock, leftHindMarkings:sock, rightHindMarkings:, headMarkings:brindle]"

次に、呼び出して文字列として保存します(かなり簡単です)

params.markings.toString()

ここから、情報を保存し、更新された情報を返します。

私の問題は、オブジェクトをDBに文字列として保存しているため、マーキングをマップとして戻すことができないようです(その後、JSONに変換されます)。

私はいくつかの異なることを試しましたが、役に立ちませんでした.

Eval.me(Item.markings)
evaluate(Item.markings)
Item.markings.toList()

助けてくれてありがとう!

4

3 に答える 3

5

私のテストを投げます。

Grails で JSON コンバーターを使用する場合、これがアプローチであるべきだと思います: (@JamesKleeh および @GrailsGuy と同義)

def json = '''{
                  "markings": {
                      "headMarkings": "Brindle",
                      "leftForeMarkings": "",
                      "rightForeMarkings": "sock",
                      "leftHindMarkings": "sock",
                      "rightHindMarkings": "",
                      "otherMarkings": ""
                   }
                }'''

def jsonObj = grails.converters.JSON.parse(json)
//This is your JSON object that should be passed in to the method
print jsonObj //[markings:[rightForeMarkings:sock, otherMarkings:, leftForeMarkings:, leftHindMarkings:sock, rightHindMarkings:, headMarkings:Brindle]]

def jsonStr = jsonObj.toString()
//This is the string which should be persisted in db
assert jsonStr == '{"markings":{"rightForeMarkings":"sock","otherMarkings":"","leftForeMarkings":"","leftHindMarkings":"sock","rightHindMarkings":"","headMarkings":"Brindle"}}'

//Get back json obj from json str
def getBackJsobObj = grails.converters.JSON.parse(jsonStr)
assert getBackJsobObj.markings.leftHindMarkings == 'sock'
于 2013-07-12T20:06:04.080 に答える