簡體   English   中英

Gson:預期為字符串,但在第 1 行第 3 列路徑 $[0] 處為 BEGIN_OBJECT

[英]Gson: Expected a string but was BEGIN_OBJECT at line 1 column 3 path $[0]

我想從包含以下內容的字符串中獲取 ArrayList:`

[
    {
        "name": "*",
        "package": "permission",
        "id": "permission.*"
    },
    {
        "name": "*",
        "package": "info",
        "id": "info.*"
    },
    {
        "name": "help",
        "package": "info",
        "id": "info.help"
    },
    {
        "name": "ping",
        "package": "info",
        "id": "info.ping"
    },
    {
        "name": "premium",
        "package": "info",
        "id": "info.premium"
    }
]

但是,我每次都會收到 JsonSyntaxException。 我的 Permission.class 看起來像這樣:

public enum Permission {
    ALL("permission", "*"),

    INFO("info", "*"),
    INFO_HELP("info", "help"),
    INFO_PING("info", "ping"),
    INFO_PREMIUM("info", "premium"),

    ;
    @SerializedName("permPack")
    public final String permPack;
    @SerializedName("permName")
    public final String permName;
    @SerializedName("permId")
    public final String id;

    Permission(String permPack, String name) {
        this.permPack = permPack;
        this.permName = name;
        this.id = permPack + "." + name;
    }

    public String getId() {
        return id;
    }

    public String getName() {
        return permName;
    }

    public String getPermPack() {
        return permPack;
    }

    public static Permission getById(String Id) {
        List<Permission> perms = Arrays.asList(Permission.values());
        for (int i = 0; i < perms.size(); i++) {
            if (perms.get(i).getId().equals(Id)){
                return perms.get(i);
            }
        }
        return null;
    }
}

我嘗試使用以下方法反序列化字符串:

    Type listType = new TypeToken<ArrayList<Permission>>(){}.getType();
    ArrayList<Permission> availablePermsList = gson.fromJson(permissionString, listType);

我還嘗試為此字符串添加名稱或使用 Permission.getById 編寫自己的反序列化器,但沒有任何效果。 我沒主意了。

這就是你的 POJO Class 的樣子,而不是枚舉,它應該是普通的 java class

class Permission {
        private String id;
        private String name;
        @SerializedName("package")
        private String packageName;

        public String getId() {
            return id;
        }

        public void setId(String id) {
            this.id = id;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public String getPackageName() {
            return packageName;
        }

        public void setPackageName(String packageName) {
            this.packageName = packageName;
        }

        @Override
        public String toString() {
            return "Permission{" +
                    "id='" + id + '\'' +
                    ", name='" + name + '\'' +
                    ", packageName='" + packageName + '\'' +
                    '}';
        }
    }

為了回答我已經從文件中使用了 JsonReader,您可以直接在gson.fromJson(...)方法中使用字符串

這就是我調用將字符串數組轉換為權限列表的方式

Type permissionsListType = new TypeToken<ArrayList<Permission>>(){}.getType();
JsonReader jsonReader = new JsonReader(new FileReader(new File("permissions.json")));
Gson gson = new Gson();
ArrayList<Permission> availablePermsList = gson.fromJson(jsonReader, permissionsListType);

System.out.println(availablePermsList);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM