2012-03-18 45 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" 
    } 
]} 

然後我有一個控制器代碼,需要把它解析並保存到兩個表...訂單和訂單產品。這是我迄今爲止,但它不是正確的一些如何必須採取投入和循環每個項目和保存。

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) 
     // ??????? 
    } 

} 

----------我的解決方案----------

服用答案從下面並修改它適合我的特殊需要,(後傳統的數據庫結構),這是我做的手動插入每個產品:

OrdersController.groovy

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」相關?我猜他們是相關的,

static hasMany = [ordersProducts: OrderProducts] 

在這種情況下,您可以解析字符串,JSON,然後初始化對象,

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

def order = new Orders(j) 
... 

order.ordersProducts = j.products 
+0

不幸的是它的舊的數據庫,並通過兩個領域的聯繫。所以我必須手動執行此操作。 – JPM 2012-03-18 17:25:22

+0

在您的「訂單」類中,您可以使用'hasMany'將其與'OrdersProduct'相關聯。如果這是不可行的,你可以通過循環,j.products.each {new OrderProducts(it)} – aldrin 2012-03-18 17:55:28

+0

仍然失去了如何循環這一點,即使你的grails.converters.JSON.parse錯誤與「沒有方法的簽名:static grails.converters.JSON.parse()適用於參數類型:(org.codehaus.groovy.grails.web.json.JSONObject「。爲什麼使用Grails我想做一些簡單的事情,它從來不簡單。 – JPM 2012-03-19 15:17:35