2012-03-18 6 views
1

コントローラからJSONの配列を抽出する方法が不明です。私は製品の配列を持つ注文を含むJSONオブジェクトを持っています。 JSONはこのように入れ子になっていますが、簡潔にするために私は多くのフィールドを減らしました。組み込み配列のJSONオブジェクトコントローラに保存

{ "customerId": "23", "customerName": "Johnson", 
    "products":[ 
    { 
     "productId": "1", 
     "finalPrice": "1.00" 
    }, 
    { 
     "productId": "2", 
     "finalPrice": "2.00" 
    }, 
    { 
     "productId": "3", 
     "finalPrice": "3.00" 
    } 
]} 

私は、これを取ると、それを解析し、二つのテーブル...受注及びOrde​​rsProductsにそれを保存する必要がコントローラーのコードを持っています。これは私が今まで持っていたことですが、正しくはないいくつかの入力とループの各項目を取って保存する必要があります。下からの答えを取って、自分の特定のニーズに合わせてそれを変更した後

class OrdersController { 
    def save = { 
     def input = request.JSON 

     def order = new Orders(input) 
     order.save(flush:true) 

     // Somehow I have to loop this for each item in array??? 
     def products = new OrdersProducts(input) 
     products.ordersId = order.id 

     products.save(flush:true) 
     // ??????? 
    } 

} 

---------- MY SOLUTION ----------

、(

import grails.converters.JSON 
import grails.converters.XML 

class OrdersController { 
    def save = { 
     def i 
     def input = request.JSON 

     def order = new Orders(input) 
     if (order.save(failOnError:true)) { 
      for (def products: input.ordersProducts) { 
       def prod = new OrdersProducts(products) 
       prod.ordersId = order.id 

       if (prod.save(failOnError:true)) { 
       //  
       } else { 
        prod.errors.allErrors.each { println it } 
       } 
      } 
     } else { 
      order.errors.each { println it } 
     } 
    } 
} 

答えて

1

は「受注」や「OrdersProducts」関連している

OrdersController.groovy:レガシーデータベース構造)が、これは私が手動で各製品を挿入するためにやったことありますか?私はこの場合、彼らは次のように関連している

static hasMany = [ordersProducts: OrderProducts] 

を推測している、あなたはJSONへの文字列を解析して、オブジェクトを初期化し、

... 
def j = grails.converters.JSON.parse(input) 

def order = new Orders(j) 
... 

order.ordersProducts = j.products 
+0

残念ながらそのレガシーデータベースと二つのフィールドを介してリンクすることができます。だから私はこれを手動で行う必要があります。 'Orders 'クラスに – JPM

+0

を追加すると、' hasMany 'を使用して' OrdersProduct 'に関連付けることができます。これが実現できない場合は、j.products.each {new OrderProducts(it)} – aldrin

+0

をループしてループすることができます。grails.converters.JSON.parseエラーでも、メソッドのシグネチャがありません:静的grails.converters.JSON.parse()は引数型に適用されます:(org.codehaus.groovy.grails.web.json.JSONObject ")Grailsを使っている理由は何ですか?単純ではない、簡単なことです。 – JPM

関連する問題