Java 中 JSON 的多维数组(并返回)
Multidimensional Array to JSON (and back) in Java
我是 Java 的新手,但我正在开发 Minecraft 插件,我需要存储一些数据并决定 json 是最简单的,因为我无法轻松访问插件的数据库。
我正在尝试制作一个基本的 JSON 到(多维)数组,以便我可以保存我的数据 - 但是所有合并最终都会将自己附加到顶级“AreaData”选项卡并且没有正确创建我正在寻找的数组。
下面是我正在尝试的部分代码 - 想知道 HashMap 是否是用于此目的的好主意
import java.util.HashMap;
public class AreaHash {
protected HashMap<String, String> AreaData = new HashMap<String, String>();
public AreaHash(String name, String Owner, Integer X, Integer Y, Integer Z){
AreaData.put("Name", name);
AreaData.put("Owner", Owner);
AreaData.put("X", X.toString());
AreaData.put("Y", Y.toString());
AreaData.put("Z", Z.toString());
}
}
AreaHash RequestedArea = new AreaHash(Name, Owner.getUniqueId().toString(), location.getBlockX(), location.getBlockY(), location.getBlockZ());
String jsonString = new Gson().toJson(RequestedArea);
DataControl.UpdateJson("raid-areas.json", jsonString);
JSON输出
{
"AreaHash": {
"Name": "Test",
"Owner": "gold",
"X": "10",
"Y": "15",
"Z": "-1000"
},
}
我实际想要制作的东西
{
"1": [
"Name": true,
"Owner": "gold",
"X": "10",
"Y": "15",
"Z": "-1000"
],
"2": [
"Name": true,
"Owner": "silver",
"X": "2110",
"Y": "15",
"Z": "-1200"
],
"3": [
"Name": true,
"Owner": "test",
"X": "-110",
"Y": "70",
"Z": "-1000"
],
}
您可以创建 AreaHash
个对象的映射,然后将其转换为 JSON 字符串。
Map<String, AreaHash> data = new HashMap<>();
data.put("1", new AreaHash(...));
data.put("2", new AreaHash(...));
data.put("3", new AreaHash(...));
String jsonString = new Gson().toJson(data);
System.out.println(jsonString);
输出(漂亮的打印)
{
"1": {
"Name": "Test",
"Owner": "gold",
"X": "10",
"Y": "10",
"Z": "0"
},
"2": {
"Name": "Test",
"Owner": "silver",
"X": "10",
"Y": "10",
"Z": "-10"
},
"3": {
"Name": "Test",
"Owner": "test",
"X": "10",
"Y": "10",
"Z": "-10"
}
}
此外,请注意您想要的输出无效 JSON。
[
"Name": true,
"Owner": "gold",
"X": "10",
"Y": "15",
"Z": "-1000"
] // this will not parse
我是 Java 的新手,但我正在开发 Minecraft 插件,我需要存储一些数据并决定 json 是最简单的,因为我无法轻松访问插件的数据库。
我正在尝试制作一个基本的 JSON 到(多维)数组,以便我可以保存我的数据 - 但是所有合并最终都会将自己附加到顶级“AreaData”选项卡并且没有正确创建我正在寻找的数组。
下面是我正在尝试的部分代码 - 想知道 HashMap 是否是用于此目的的好主意
import java.util.HashMap;
public class AreaHash {
protected HashMap<String, String> AreaData = new HashMap<String, String>();
public AreaHash(String name, String Owner, Integer X, Integer Y, Integer Z){
AreaData.put("Name", name);
AreaData.put("Owner", Owner);
AreaData.put("X", X.toString());
AreaData.put("Y", Y.toString());
AreaData.put("Z", Z.toString());
}
}
AreaHash RequestedArea = new AreaHash(Name, Owner.getUniqueId().toString(), location.getBlockX(), location.getBlockY(), location.getBlockZ());
String jsonString = new Gson().toJson(RequestedArea);
DataControl.UpdateJson("raid-areas.json", jsonString);
JSON输出
{
"AreaHash": {
"Name": "Test",
"Owner": "gold",
"X": "10",
"Y": "15",
"Z": "-1000"
},
}
我实际想要制作的东西
{
"1": [
"Name": true,
"Owner": "gold",
"X": "10",
"Y": "15",
"Z": "-1000"
],
"2": [
"Name": true,
"Owner": "silver",
"X": "2110",
"Y": "15",
"Z": "-1200"
],
"3": [
"Name": true,
"Owner": "test",
"X": "-110",
"Y": "70",
"Z": "-1000"
],
}
您可以创建 AreaHash
个对象的映射,然后将其转换为 JSON 字符串。
Map<String, AreaHash> data = new HashMap<>();
data.put("1", new AreaHash(...));
data.put("2", new AreaHash(...));
data.put("3", new AreaHash(...));
String jsonString = new Gson().toJson(data);
System.out.println(jsonString);
输出(漂亮的打印)
{
"1": {
"Name": "Test",
"Owner": "gold",
"X": "10",
"Y": "10",
"Z": "0"
},
"2": {
"Name": "Test",
"Owner": "silver",
"X": "10",
"Y": "10",
"Z": "-10"
},
"3": {
"Name": "Test",
"Owner": "test",
"X": "10",
"Y": "10",
"Z": "-10"
}
}
此外,请注意您想要的输出无效 JSON。
[
"Name": true,
"Owner": "gold",
"X": "10",
"Y": "15",
"Z": "-1000"
] // this will not parse