![](/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.