Java-多个GSON?
好的,我正在创建一个使用Java-多个GSON?,java,json,Java,Json,好的,我正在创建一个使用JSON保存日期的应用程序。我使用了GSON作为我的JSON处理器 是的,我知道如何使用Gson。我在网上学习教程。问题是,教程在web上只保存“一”个json数据。我是说,比如说 { "Data1": { "name": "Data1", "info": "ABCDEFG" } } 所以,在用户保存了Data1之后,他们希望像这样保存Data2、Data3等等 { "Data1": { "name": "Da
JSON
保存日期的应用程序。我使用了GSON
作为我的JSON
处理器
是的,我知道如何使用Gson
。我在网上学习教程。问题是,教程在web上只保存“一”个json数据。我是说,比如说
{
"Data1": {
"name": "Data1",
"info": "ABCDEFG"
}
}
所以,在用户保存了Data1之后,他们希望像这样保存Data2、Data3等等
{
"Data1": {
"name": "Data1",
"info": "ABCDEFG"
},
"Data2": {
"name": "Data2",
"info": "ABCDEFGHIJ"
}
}
{
"data1": {
"name": "data1",
"info": "abcde"
},
"data2": {
"name": "data2",
"info": "abcdef"
}
}
但如果用户想要保存100多个数据,我必须创建100个类吗?下面是我的代码
JSONTest.class
public class JSONTest
{
private static Gson gson;
private static File file;
private static JSONTest instance;
private static Bean bean;
private static Map<String, String> data = new HashMap();
public static void main(String[] args)
{
bean = new Bean();
File file = new File("C://test-json.json");
GsonBuilder builder = new GsonBuilder();
builder.setPrettyPrinting();
gson = builder.create();
data.put("name", "data1");
data.put("info", "abcde");
bean.setData(data);
String jsonString = gson.toJson(bean);
try
{
FileWriter fw = new FileWriter(file);
fw.write(jsonString);
fw.close();
}
catch(IOException e)
{
e.printStackTrace();
}
}
}
好的,现在我更改值(表示我要添加新数据
data.put("name", "data2");
data.put("info", "abcdef");
bean.setData(data);
结果是这样的
{
"data": {
"name": "data1",
"info": "abcde"
}
}
{
"data": {
"name": "data2",
"info": "abcdef"
}
}
但是我想要这样的结果
{
"Data1": {
"name": "Data1",
"info": "ABCDEFG"
},
"Data2": {
"name": "Data2",
"info": "ABCDEFGHIJ"
}
}
{
"data1": {
"name": "data1",
"info": "abcde"
},
"data2": {
"name": "data2",
"info": "abcdef"
}
}
所以我的问题是,我该怎么做?如果用户想要保存100多个数据,我必须创建100多个类或元素吗?还有,如何添加“
selectedData:“data1”
”这样我的json加载程序才能只加载1个数据?将数据作为对象
设置其值并将其保存在ArrayList中
将ArrayList转换为JSON在使用JSON解析器/生成器之前,您必须了解您正在使用的JSON 这个 是一个JSON对象,包含名为
Data1
的JSON对象
这个
是一个JSON对象,包含两个名为Data1
和Data2
的JSON对象
一个简单的工作示例是
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);
}
上面的照片
{Data1=[name = Data1, info = ABCDEFG], Data2=[name = Data2, info = ABCDEFGHIJ]}
由于两个嵌套对象是相同的,您可以告诉Gson
将它们反序列化为Map
,其中JSON对象的名称是键,对象本身是值
具有可以映射到Java类型的非常特定的类型。您必须使用相应的类型。例如,您可以对JSON数组使用List
现在我们回到您的问题,您已经编辑了它 所以我的问题是,我该怎么做呢?如果用户想保存100多个数据呢 我必须制作100多个类或元素?还有,如何添加 “selectedData:“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());
因为键是字符串
data1
,而值是另一个JSON对象,如上面所示,它是序列化的
所以我的问题是,我该怎么做呢?如果用户想保存100多个数据呢
我必须制作100+类或元素
上面应该清楚你需要做什么
还有,如何添加“selectedData:“data1”以便我的json加载程序
仅加载1个数据
请澄清您的意思。您不能只加载JSON的一个子集。Gson将加载所有JSON,您可以从中提取名为
data1
的JSON对象。正如Sotirios Delimanolis所说,您需要一个映射,即
public class Data {
private final String name;
private final String info;
public Data(String name, String info) {
this.name = name;
this.info = info;
}
public String getInfo() {
return info;
}
public String getName() {
return name;
}
}
然后反序列化映射
Gson gson = new Gson();
Type collectionType = new TypeToken<Map<String, Data>>(){}.getType();
Map<String, Data> datas = gson.fromJson(json, collectionType);
Data data1 = datas.get("data1");
Gson-Gson=new-Gson();
Type collectionType=new-TypeToken(){}.getType();
Map data=gson.fromJson(json,collectionType);
datadata1=datas.get(“data1”);
看起来像是一个映射图在这里可以工作。这将产生一个JSON数组。OP有一个JSON对象。TBH,看起来OP最好使用一个对象数组,他只是这样做,因为他没有意识到这一点。@jeremy,这取决于它。如果这100多个JSON对象具有相同的格式,那么您只需要一个类(加上任何嵌套)。请尝试我建议的包含2个以上json对象的代码。然后用json数组做一个示例。不,您的代码不起作用。我以前试过。它会将旧的json数据替换为新的json数据。@Jeremy请编辑您的问题,并显示您尝试运行的代码和出现的错误。它对我非常有效。@Jeremy您正在做一些完整的事情。@Jeremy与我的建议完全无关。你的Map
是Map,是Bean
的一个字段。我有Map
,它是根JSON对象。@Jeremy我的问题中已有的示例有什么问题吗?我想你需要理解进入JSON字符串的数据类型。仔细阅读。你不需要创建100个类您将只有100个类数据实例。
{
"data1": {
"name": "some value",
"info": "some other value"
}
}
public class Data {
private final String name;
private final String info;
public Data(String name, String info) {
this.name = name;
this.info = info;
}
public String getInfo() {
return info;
}
public String getName() {
return name;
}
}
Gson gson = new Gson();
Type collectionType = new TypeToken<Map<String, Data>>(){}.getType();
Map<String, Data> datas = gson.fromJson(json, collectionType);
Data data1 = datas.get("data1");