2010-10-27 46 views
2

我正尝试使用java net.sf.json库产生以下json输出,但未成功。我如何使用java提供以下json输出

[ { “数据”:[ [ 1, 1, “文本” ], [ 2, 2, “文本” ], [ 3, 0 , “文本” ], [ 5, 2, “文本” ] ], “标签”:“第一辑” } ]

我已阅读这些论坛上GSON是我最好的选择前进。任何人都可以提供如何使用Gson或其他合适的基于Java的库来生成这个json的例子。

在此先感谢

回答

2

我喜欢这个 http://www.json.org/javadoc/org/json/JSONObject.htmlhttp://json.org/java/

和JSONArray。

与2个对象:

JSONArray inner = new JSONArray() 
inner.add(1);inner.add("text"); 
JSONObject outer = new JSONObject(); 
outer.put("data",inner); 
outer.put("label", "stuff"); 

String out = outer.toString() 
+0

我试过这个,它没有办法。我添加了几个内部函数来匹配我之后的json。非常感激。 – jaseFace 2010-10-27 17:03:44

2

Gson

GSON是可以用来将Java对象转换成JSON表示一个Java库。它也可以用来将JSON字符串转换为等效的Java对象。 Gson可以使用任意Java对象,包括您没有源代码的预先存在的对象。

有几个可以将Java对象转换为JSON的开源项目。但是,其中大多数要求您将Java注释放置在类中,如果您无法访问源代码,则无法执行此操作。大多数也不完全支持Java泛型的使用。 Gson认为这些都是非常重要的设计目标。

import com.google.gson.Gson; 

class Person { 
    private int age = 10; 
    private String name = "jigar"; 
} 

Person obj = new Person(); 
Gson gson = new Gson(); 
String json = gson.toJson(obj); 

http://json.org/java/

import org.json.JSONObject; 

... 
... 

JSONObject json = new JSONObject(); 
json.put("city", "Mumbai"); 
json.put("country", "India"); 

... 

String output = json.toString(); 
2

这是很容易的使用Java对象是这样的:

public class GsonTest { 
    private List<DataItem> data; 
    private String label; 

    public GsonTest() {} // for Gson 

    public GsonTest(List<DataItem> data, String label) { 
    this.data = data; 
    this.label = label; 
    } 
    // ... 
} 

public class DataItem { 
    private int val1; 
    private int val2; 
    private String text; 

    public DataItem() {} // for Gson 

    public DataItem(int val1, int val2, String text) { 
    this.val1 = val1; 
    this.val2 = val2; 
    this.text = text; 
    } 
    // ... 
} 

由于您的JSON格式使用的阵列,而不是针对每个数据项的对象(根据您的示例,对象会更有意义),您需要添加一个自定义处理程序,用于序列化和反序列化与JSON数组之间的DataItem

public class DataItemConverter implements JsonDeserializer<DataItem>, 
    JsonSerializer<DataItem> { 

    public DataItem deserialize(JsonElement json, Type typeOfT, 
     JsonDeserializationContext context) throws JsonParseException { 
    JsonArray array = json.getAsJsonArray(); 
    int val1 = array.get(0).getAsInt(); 
    int val2 = array.get(1).getAsInt(); 
    String text = array.get(2).getAsString(); 
    return new DataItem(val1, val2, text); 
    } 

    public JsonElement serialize(DataItem src, Type typeOfSrc, 
     JsonSerializationContext context) { 
    JsonArray array = new JsonArray(); 
    array.add(new JsonPrimitive(src.val1)); 
    array.add(new JsonPrimitive(src.val2)); 
    array.add(new JsonPrimitive(src.text)); 
    return array; 
    } 
} 

然后你只需要在您创建Gson实例来注册这个转换器,你是好去!由于我们的DataItem转换器也处理反序列化,所以您也可以将生成的JSON反序列化为List<GsonTest>

public static void testSerialization() { 
    List<DataItem> data = new ArrayList<DataItem>(); 
    data.add(new DataItem(1, 1, "Text")); 
    data.add(new DataItem(2, 2, "Text")); 
    data.add(new DataItem(3, 0, "Text")); 
    data.add(new DataItem(5, 2, "Text")); 

    GsonTest test = new GsonTest(data, "First Series"); 
    List<GsonTest> list = new ArrayList<GsonTest>(); 
    list.add(test); 
    Gson gson = new GsonBuilder() 
     .registerTypeAdapter(DataItem.class, new DataItemConverter()) 
     .create(); 
    System.out.println(gson.toJson(list)); 
} 
相关问题