简体   繁体   English

Gson:预期为字符串,但在第 1 行第 3 列路径 $[0] 处为 BEGIN_OBJECT

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

I want to get an ArrayList out of a String containing:`我想从包含以下内容的字符串中获取 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"
    }
]

However, I get a JsonSyntaxException every time.但是,我每次都会收到 JsonSyntaxException。 My Permission.class looks like this:我的 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;
    }
}

I tried to deserialize the String using:我尝试使用以下方法反序列化字符串:

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

I also tried to add a name to this String or writing an own deserializer using Permission.getById, nothing works.我还尝试为此字符串添加名称或使用 Permission.getById 编写自己的反序列化器,但没有任何效果。 I am out of ideas.我没主意了。

This is how your POJO Class should look like instead of enum it should be plain java class这就是你的 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 + '\'' +
                    '}';
        }
    }

For answering i have used JsonReader from a file, instead you can directly use string in gson.fromJson(...) method为了回答我已经从文件中使用了 JsonReader,您可以直接在gson.fromJson(...)方法中使用字符串

This is how i am calling to convert Array of string to Permission List这就是我调用将字符串数组转换为权限列表的方式

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.

相关问题 Gson错误预期为begin_object,但在第1行第1列路径$处为字符串 - Gson error expected begin_object but was string at line 1 column 1 path $ com.google.gson.JsonSyntaxException:预期为字符串,但在行1的列18101路径$ .data [0] .groups [0]中为BEGIN_OBJECT - com.google.gson.JsonSyntaxException: Expected a string but was BEGIN_OBJECT at line 1 column 18101 path $.data[0].groups[0] Retrofit和gson错误:java.lang.IllegalStateException:预期为BEGIN_OBJECT,但在第1行第1列的路径$ STRING - Retrofit and gson Error : java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $ 需要一个字符串,但在第 3 行第 4 列路径 $.SUCCESS 处为 BEGIN_OBJECT - Expected a string but was BEGIN_OBJECT at line 3 column 4 path $.SUCCESS 预期为 BEGIN_OBJECT,但在第 4 行第 1 列路径 $ - Expected BEGIN_OBJECT but was STRING at line 4 column 1 path $ 预期为BEGIN_OBJECT,但位于第13行第1列的路径$ STRING - Expected BEGIN_OBJECT but was STRING at line 13 column 1 path $ Gson 错误:“预期为 BEGIN_ARRAY,但在第 1 行第 2 列路径为 BEGIN_OBJECT” - Gson error: “Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path” GSON:应为BEGIN_OBJECT,但在第1行第2列路径$处为BEGIN_ARRAY - GSON: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 path $ GSON和Volley =&gt;预期为BEGIN_ARRAY,但在第1行第2列路径$ BEGIN_OBJECT - GSON & Volley => Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $ 转换json与gson错误预期BEGIN_OBJECT但是BEGIN_ARRAY在第1行第2列路径$ - converting json with gson error Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 path $
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM