2012-03-29 31 views
15

tôi cần phải tạo ra một thông điệp json như thế này:cách sử dụng jsonbuilder với bộ sưu tập?

{ 
    success:true, 
    count:3, 
    data: [ 
    {id:1}, 
    {id:2}, 
    {id:3} 
    ] 
} 

Tôi đã cố gắng này

import groovy.json.* 

def tasks = [1, 2,3] 
def json = new JsonBuilder() 

json{ 
    success(true) 
    count(tasks.size()) 
    data { 
    tasks.each { 
     data(
     id: it   
    ) 
    } 
    } 
} 

JsonOutput.prettyPrint(json.toString()) 

nhưng nó không hoạt động. Ai đó có thể chỉ cho tôi cách làm cho nó hoạt động được không?

Trả lời

32

tôi khuyên bạn nên chuyển danh sách các tác vụ vào một danh sách các hình thức [[id: 1], [id: 2], [id: 3]] và sau đó "jsonizing" nó:

import groovy.json.JsonBuilder 

def tasks = [1, 2, 3] 
def json = new JsonBuilder() 

json{ 
    success(true) 
    count(tasks.size()) 
    data(tasks.collect {[id: it]}) 
} 

println json.toPrettyString() 

Tôi thường thích tạo ra các cấu trúc dữ liệu trong Groovy đầu tiên (ví dụ như danh sách, bản đồ) và sau đó chuyển đổi chúng thành JSON, theo cách đó tôi thường có nhiều quyền kiểm soát hơn đối với dữ liệu sẽ được tuần tự hóa và tôi không cần phải bao gồm logic trên mã tuần tự hóa.

import groovy.json.JsonBuilder 

def tasks = [1, 2, 3] 

def data = [ 
    success: true, 
    count: tasks.size(), 
    data: tasks.collect {[id: it]} 
] 

def json = new JsonBuilder(data) 
println json.toPrettyString() 
+1

hey cú pháp groovy: 'json {...}' là gì? dấu ngoặc nhọn ngay sau tên biến? new to groovy ... – Mahesha999

+1

@ Mahesha999 đối tượng 'json' thuộc loại có thể được gọi. Việc thực hiện 'json {...}' giống với 'json ({...})', được gọi là đối tượng 'json' với một khối mã như một tham số. – epidemian

+0

Tôi phải thiếu một cái gì đó cơ bản từ groovy. "Loại có thể được gọi là" nghĩa là gì? Chúng ta thường gọi các phương thức trong Java không phải kiểu cá thể/đối tượng/biến trực tiếp. – Mahesha999

Các vấn đề liên quan