![](/img/trans.png)
[英]Gson error expected begin_object but was string at line 1 column 1 path $
[英]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.