Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
类javax.swing.JFrame声明多个名为state的JSON字段_Java_Json_Gson - Fatal编程技术网

类javax.swing.JFrame声明多个名为state的JSON字段

类javax.swing.JFrame声明多个名为state的JSON字段,java,json,gson,Java,Json,Gson,我正在尝试制作一个2D平铺游戏,我试图通过从JSON文件导入项目来添加项目。 我尝试使用GSON库导入JSON文件,但每次运行代码时都会出现以下错误: java.lang.IllegalArgumentException: class javax.swing.JFrame declares multiple JSON fields named state at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBo

我正在尝试制作一个2D平铺游戏,我试图通过从JSON文件导入项目来添加项目。 我尝试使用GSON库导入JSON文件,但每次运行代码时都会出现以下错误:

java.lang.IllegalArgumentException: class javax.swing.JFrame declares multiple JSON fields named state
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:172)
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:102)
    at com.google.gson.Gson.getAdapter(Gson.java:457)
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:117)
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:166)
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:102)
    at com.google.gson.Gson.getAdapter(Gson.java:457)
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:117)
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:166)
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:102)
    at com.google.gson.Gson.getAdapter(Gson.java:457)
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:117)
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:166)
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:102)
    at com.google.gson.Gson.getAdapter(Gson.java:457)
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:117)
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:166)
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:102)
    at com.google.gson.Gson.getAdapter(Gson.java:457)
    at com.google.gson.internal.bind.ArrayTypeAdapter$1.create(ArrayTypeAdapter.java:48)
    at com.google.gson.Gson.getAdapter(Gson.java:457)
    at com.google.gson.Gson.fromJson(Gson.java:921)
    at com.google.gson.Gson.fromJson(Gson.java:860)
    at dev.bako.tilegame.utils.JSONImporter.ItemJSONReader(JSONImporter.java:13)
    at dev.bako.tilegame.Game.init(Game.java:63)
    at dev.bako.tilegame.Game.run(Game.java:101)
    at java.lang.Thread.run(Thread.java:745)

JSONImporter类如下所示:

public class JSONImporter {

    public static void ItemJSONReader() throws Exception {

        Item[] items = new Gson().fromJson(new FileReader("res/JSON/Item.json"), Item[].class);//This is where I get the error
        System.out.println("Loaded file!" + items); 

    }

}
我正在尝试导入的JSON文件:

{
  "Wood": {
    "id": 0
  },
  "Rock": {
    "id": 2
  }
}

JSON文件的结构表明您应该使用
Map
,而不是
Item[]

  • JSON数组被
    []
  • 数组(列表)没有键,此处键明显可见,例如
    “Wood”
因此,改变这一点应该会引导您找到解决方案


然而,Swing和JFrame是跟踪堆栈的一部分这一事实表明它们是
类的一部分。记住“干净的代码”或SOLID如何告诉(在本例中)类应该只有一个职责:传输数据通常由虚拟DTO执行,而虚拟DTO不应该具有与视图相关的逻辑。

项的结构是什么,当数据看起来是映射时,为什么要反序列化项[]?那么Swing和JFrame与数据反序列化过程有什么关系呢?请不要告诉我,您没有独立于视图层的DTO进行反序列化。我将项的类型更改为Map,现在它可以工作了,我没有想到使用Map,所以我将重点放在ArrayList上,我认为这就是所有问题所在。我还修改了该方法的实现,因为我错误地将其放在视图层中,现在我没有新的问题或错误,因为这有助于我将我的评论作为答案。