I want to get an ArrayList out of a String containing:`
[
{
"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. My Permission.class looks like this:
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. I am out of ideas.
This is how your POJO Class should look like instead of enum it should be plain 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
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);
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.