Java 读取 JSON null

标签 java json arrays gson

好吧,无论出于什么我无法理解的原因,我都变得空了。

这是我的代码:

import java.util.*;
import java.io.*;
import com.google.gson.*;


public class readGoogle {

    public static String MapTitle;
    public static Data data;
    public static Item item;
    public static String dan;
    public static FileReader fr;


        public static void main(String[] args) {

            /**
try {
    fr = new FileReader("map1.txt");
}catch(FileNotFoundException fne) {
    fne.printStackTrace();
}
        StringBuffer sb = new StringBuffer();
        char[] b = new char[1000];
        int n = 0;
        try {
        while ((n = fr.read(b)) > 0) {
             sb.append(b, 0, n);
         }
         }catch(IOException rex) {
             rex.printStackTrace();
         }
        String fileString = sb.toString();
        **/

                               String json =
                               "{"
                               +"'name': 'map_one.txt',"
                               +"'title': 'xxx One',"
                               +"'currentMap': 4,"
                               +"'rightMap': 3,"
                               +"'lefttMap': 5,"
                               +"'downMap': 1,"
                               +"'upMap': 2,"
                               +"'items': ["
                               +"   { name: 'Pickaxe', x: 5, y: 1 },"
                               +"   { name: 'Battleaxe', x: 2, y: 3 }"
                               +"],"
                               +"   'map': [ [ 1,3,1,1,1,24,1,1,1,1,1,1,1 ],"
                               +"   [ 1,3,1,1,1,24,1,1,1,1,1,1,1 ],"
                               +"   [ 1,7,1,1,1,24,1,1,24,1,1,1,1 ],"
                               +"   [ 1,7,1,1,7,1,1,1,24,1,1,1,1 ],"
                               +"   [ 1,7,7,7,1,24,24,24,24,1,1,1,1 ],"
                               +"   [ 1,1,7,1,1,24,1,24,1,1,1,1,1 ],"
                               +"   [ 1,1,1,1,1,24,1,1,1,1,1,1,1 ],"
                               +"   [ 1,1,3,1,1,24,1,1,1,1,1,1,1 ],"
                               +"   [ 1,3,3,1,1,24,1,1,1,1,1,1,1 ]]"
+"};";


    try {
    data = new Gson().fromJson(json, Data.class);
    }catch (Exception er) {
        er.printStackTrace();
    }

    System.out.println("Name of map: " + data.getTitle());
    System.out.println("File of map: " + data.getName());
    System.out.println("Current Map: " + data.getCurrentMap());
    System.out.println(data.getItems().get(0).getName()); // Pickaxe



    }

public class Item {
        public String name;
        public int x;
        public int y;

        public String getName() { return name; }
        public int getX() { return x; }
        public int getY() { return y; }

        public void setName(String name) { this.name = name; }
        public void setX(int x) { this.x = x; }
        public void setY(int y) { this.y = y; }
    }

      public static class Data {
            private String name;
            private String title;
            private int currentMap;
            private int leftMap;
            private int rightMap;
            private int upMap;
            private int downMap;
            private List<Item> items;
            private int[][] map;

            public String getName() { return name; }
            public String getTitle() { return title; }
            public int getCurrentMap() { return currentMap; }
            public int getUpMap() { return upMap; }
            public int getDownMap() { return downMap; }
            public int getLeftMap() { return leftMap; }
            public int getRightMap() { return rightMap; }
            public List<Item> getItems() { return items; }
            public int[][] getMap() { return map; }

            public void setName(String name) { this.name = name; }
            public void setTitle(String title) { this.title = title; }
            public void setCurrentMap(int currentMap) { this.currentMap = currentMap; }
            public void setItems(List<Item> items) { this.items = items; }
            public void setMap(int[][] map) { this.map = map; }
        }

}


public static class Item {
        public static String name;
        public static int x;
        public int y;

        public static String getName() { return name; }
        public static int getX() { return x; }
        public int getY() { return y; }

        public void setName(String name) { this.name = name; }
        public void setX(int x) { this.x = x; }
        public void setY(int y) { this.y = y; }
    }

      public static class Data {
            private String name;
            private String title;
            private int currentMap;
            private int leftMap;
            private int rightMap;
            private int upMap;
            private int downMap;
            private List<Item> items;
            private int[][] map;

            public String getName() { return name; }
            public String getTitle() { return title; }
            public int getCurrentMap() { return currentMap; }
            public int getUpMap() { return upMap; }
            public int getDownMap() { return downMap; }
            public int getLeftMap() { return leftMap; }
            public int getRightMap() { return rightMap; }
            public List<Item> getItems() { return items; }
            public int[][] getMap() { return map; }

            public void setName(String name) { this.name = name; }
            public void setTitle(String title) { this.title = title; }
            public void setCurrentMap(int currentMap) { this.currentMap = currentMap; }
            public void setItems(List<Item> items) { this.items = items; }
            public void setMap(int[][] map) { this.map = map; }
        }

}

这是输出:

    com.google.gson.JsonParseException: The JsonDeserializer com.google.gson.Default
TypeAdapters$CollectionTypeAdapter@6016a786 failed to deserialized json object [
{"name":"Pickaxe","x":5,"y":1},{"name":"Battleaxe","x":2,"y":3}] given the type
com.google.gson.ParameterizedTypeImpl@6c59096e
        at com.google.gson.JsonDeserializerExceptionWrapper.deserialize(JsonDese
rializerExceptionWrapper.java:63)
        at com.google.gson.JsonDeserializationVisitor.invokeCustomDeserializer(J
sonDeserializationVisitor.java:88)
        at com.google.gson.JsonObjectDeserializationVisitor.visitFieldUsingCusto
mHandler(JsonObjectDeserializationVisitor.java:117)
        at com.google.gson.ObjectNavigator.navigateClassFields(ObjectNavigator.j
ava:150)
        at com.google.gson.ObjectNavigator.accept(ObjectNavigator.java:123)
        at com.google.gson.JsonDeserializationContextDefault.fromJsonObject(Json
DeserializationContextDefault.java:73)
        at com.google.gson.JsonDeserializationContextDefault.deserialize(JsonDes
erializationContextDefault.java:51)
        at com.google.gson.Gson.fromJson(Gson.java:495)
        at com.google.gson.Gson.fromJson(Gson.java:444)
        at com.google.gson.Gson.fromJson(Gson.java:396)
        at com.google.gson.Gson.fromJson(Gson.java:372)
        at readGoogle.main(readGoogle.java:62)
Caused by: java.lang.RuntimeException: No-args constructor for class readGoogle$
Item does not exist. Register an InstanceCreator with Gson for this type to fix
this problem.
        at com.google.gson.MappedObjectConstructor.constructWithNoArgConstructor
(MappedObjectConstructor.java:64)
        at com.google.gson.MappedObjectConstructor.construct(MappedObjectConstru
ctor.java:53)
        at com.google.gson.JsonObjectDeserializationVisitor.constructTarget(Json
ObjectDeserializationVisitor.java:41)
        at com.google.gson.JsonDeserializationVisitor.getTarget(JsonDeserializat
ionVisitor.java:56)
        at com.google.gson.ObjectNavigator.accept(ObjectNavigator.java:101)
        at com.google.gson.JsonDeserializationContextDefault.fromJsonObject(Json
DeserializationContextDefault.java:73)
        at com.google.gson.JsonDeserializationContextDefault.deserialize(JsonDes
erializationContextDefault.java:51)
        at com.google.gson.DefaultTypeAdapters$CollectionTypeAdapter.deserialize
(DefaultTypeAdapters.java:472)
        at com.google.gson.DefaultTypeAdapters$CollectionTypeAdapter.deserialize
(DefaultTypeAdapters.java:435)
        at com.google.gson.JsonDeserializerExceptionWrapper.deserialize(JsonDese
rializerExceptionWrapper.java:50)
        ... 11 more
Exception in thread "main" java.lang.NullPointerException
        at readGoogle.main(readGoogle.java:67)
Press any key to continue . . .

Items json 数组中出现问题...:S

最佳答案

您确定 Item 的属性“name”应该是静态的吗?我觉得不太对劲......

编辑——以及属性“x”

编辑——如果你查看堆栈跟踪,它会说

Caused by: java.lang.RuntimeException: No-args constructor for class readGoogle$
Item does not exist.

因此您需要提供一个公共(public)且不带参数的构造函数。

关于Java 读取 JSON null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3294829/

相关文章:

javascript - 在循环中用数组内容替换html中的字符串

header 中的c++数组声明

java - Java中如何统一处理 "Exception or null"的情况?

java - 如何使用正则表达式获取文件扩展名?

java - 如何找到直线上均匀分布的点?

javascript - 签名板 - "Type It"不工作

javascript - 从变量(从导入的 JS)中获取字符串作为对象中的键

java - 解析数据 org.json.JSONException 时出错,已经尝试其他帖子

java - home_timeline API 的 Twitter 分页不起作用

PHP 类型提示对象数组