我正在尝试使用 java net.sf.json 库生成以下 json 输出,但没有成功。
[ { "数据": [ [ 1, 1, "文本" ], [ 2, 2, "文本" ], [ 3, 0, "文本" ], [ 5, 2, "文本" ] ], "标签": "第一个系列" } ]
我在这些论坛上读过 Gson 是我前进的最佳选择。谁能提供一个如何使用 Gson 或其他合适的基于 Java 的库生成此 json 的示例。
提前致谢
使用这样的 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
JSON 数组进行序列化和反序列化。
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));
}
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);
import org.json.JSONObject;
...
...
JSONObject json = new JSONObject();
json.put("city", "Mumbai");
json.put("country", "India");
...
String output = json.toString();
我喜欢这个 来自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()