2

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

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

我在这些论坛上读过 Gson 是我前进的最佳选择。谁能提供一个如何使用 Gson 或其他合适的基于 Java 的库生成此 json 的示例。

提前致谢

4

3 回答 3

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 格式对每个数据项使用数组而不是对象(根据您的示例,对象会更有意义),因此您需要添加一个自定义处理程序来对DataItemJSON 数组进行序列化和反序列化。

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));
}
于 2010-10-27T16:26:51.023 回答
2

格森

Gson 是一个 Java 库,可用于将 Java 对象转换为其 JSON 表示形式。它还可用于将 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();  
于 2010-10-27T16:07:00.130 回答
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()
于 2010-10-27T16:07:54.840 回答