如何使用java提供以下json输出

时间:2010-10-27 16:04:22

标签: java json gson

我正在尝试使用java net.sf.json库生成以下json输出但是不成功。

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

我在这些论坛上看过Gson是我最好的选择。任何人都可以提供一个如何使用Gson或其他合适的基于java的库生成此json的示例。

提前致谢

3 个答案:

答案 0 :(得分:2)

Gson

  

Gson是一个Java库,可用于将Java对象转换为其JSON表示。它还可用于将JSON字符串转换为等效的Java对象。 Gson可以处理任意Java对象,包括你没有源代码的预先存在的对象。

     

有一些开源项目可以将Java对象转换为JSON。但是,大多数要求您在类中放置Java注释,如果您无法访问源代码,则无法执行此操作。大多数人也不完全支持使用Java Generics。 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();  

答案 1 :(得分:2)

我喜欢这个 来自 http://json.org/java/

http://www.json.org/javadoc/org/json/JSONObject.html

和JSONArray。

使用这两个对象:

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()

答案 2 :(得分: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格式为每个数据项使用数组而不是对象(根据您的示例,对象会更有意义),您需要添加自定义处理程序,以便将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; } } JSON数组。

Gson

然后,您只需在创建DataItem实例时注册此转换器,就可以了!由于我们的List<GsonTest>转换器也处理反序列化,因此您也可以将生成的JSON反序列化为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)); }

{{1}}