package org.vaadin.smartgwt.server.util; import java.util.Arrays; import java.util.Iterator; import java.util.Map; import org.codehaus.jackson.map.ObjectMapper; import org.codehaus.jackson.map.SerializationConfig; import org.vaadin.smartgwt.server.data.Record; import com.google.common.collect.Maps; public class JSONHelper { public static String getJsonString(Record[] records) throws Exception { ObjectMapper objectMapper = new ObjectMapper(); objectMapper.configure(SerializationConfig.Feature.WRITE_DATES_AS_TIMESTAMPS, false); StringBuffer buffer = new StringBuffer(); buffer.append('['); for (Iterator<Record> iterator = Arrays.asList(records).iterator(); iterator.hasNext();) { buffer.append(objectMapper.writeValueAsString(toMap(iterator.next()))); if (iterator.hasNext()) { buffer.append(','); } } buffer.append(']'); return buffer.toString(); } private static Map toMap(Record record) throws Exception { final Map<Object, Object> mapped = Maps.newHashMap(); for (String name : record.getAttributes()) { Object value = record.getAttributeAsObject(name); if (value instanceof Record) { mapped.put(name, toMap((Record) value)); } else if (value instanceof Record[]) { Record[] arr = (Record[]) value; Map[] maps = new Map[arr.length]; for (int i = 0; i < arr.length; i++) { maps[i] = toMap(arr[i]); } mapped.put(name, maps); } else { mapped.put(name, value); } } return mapped; } }