在使用 JSON 解析器/生成器之前,您必须了解正在使用的 JSON。
This
{
"Data1": {
"name": "Data1",
"info": "ABCDEFG"
}
}
是一个 JSON 对象,其中包含一个名为的 JSON 对象Data1
.
This
{
"Data1": {
"name": "Data1",
"info": "ABCDEFG"
},
"Data2": {
"name": "Data2",
"info": "ABCDEFGHIJ"
}
}
是一个 JSON 对象,包含两个名为Data1
and Data2
.
一个简单的工作示例是
public static void main(String[] args) throws Exception {
String json = "{ \"Data1\": { \"name\": \"Data1\", \"info\": \"ABCDEFG\" }, \"Data2\": { \"name\": \"Data2\", \"info\": \"ABCDEFGHIJ\" } }";
Gson gson = new Gson();
Map<String, CustomBean> objects = gson.fromJson(json, new TypeToken<Map<String, CustomBean>>() {}.getType());
System.out.println(objects);
}
where CustomBean
is
public class CustomBean {
private String name;
private String info;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getInfo() {
return info;
}
public void setInfo(String info) {
this.info = info;
}
public String toString() {
return "[name = " + name + ", info = " + info + "]";
}
}
以上打印
{Data1=[name = Data1, info = ABCDEFG], Data2=[name = Data2, info = ABCDEFGHIJ]}
由于两个嵌套对象是相同的,因此您可以判断Gson
将它们反序列化为Map
其中 JSON 对象的名称是键,对象本身是值。
The JSON格式 http://www.json.org/具有可以映射到 Java 类型的非常具体的类型。您必须使用相应的类型。例如,您可以使用List
对于 JSON 数组。
现在您已经编辑了问题,让我们回到您的问题
所以我的问题是,我该怎么做?如果用户想保存 100 多个数据,我是否必须创建 100 多个类或元素?另外,如何添加“选定的数据:”data1“”以便我的 json 加载器仅加载 1 个数据?
根据你给出的例子,在我看来你误解了 Gson 的工作原理。
Gson 尝试将您的对象序列化为 JSON 对象。一个简单类的对象,例如
public class Bean {
private String name = "some value";
private String info = "some other value";
}
很好地映射到以下 JSON 对象
{
"name" : "some value",
"info" : "some other value"
}
java 类Map
是一个可以很好地映射到 JSON 的特殊类。键用作 JSON 对象的名称,值用作 JSON 对象的值,可以是数字、字符串、JSON 数组或其他 JSON 对象。所以Map
以下代码片段中的对象
Map<String, Bean> map = new HashMap<>();
map.put("data1", new Bean());
由 Gson 序列化将给出以下 JSON
{
"data1": {
"name": "some value",
"info": "some other value"
}
}
因为关键是String
data1
该值是另一个 JSON 对象,它被序列化,如我上面所示。
所以我的问题是,我该怎么做?如果用户想保存 100 多个数据,该怎么办
我必须制作 100 多个类或元素?
通过上面的内容应该很清楚你需要做什么了。
另外,如何添加“selectedData:”data1“”所以我的json加载器如此
只加载1个数据?
请澄清你的意思。您不能仅加载 JSON 的子集。 Gson 将加载所有内容,您可以提取名为的 JSON 对象data1
从那。