大家好!
这是我的json:
{"USER_DATA":{"USER_NAME":"John","PERMISSIONS" : "Admin"}}
当我尝试这段代码时:
Type listType = new TypeToken<List<Entity>>() {}.getType();
List<Entity> entities = gson.fromJson(myJson, listType);
我收到错误:预计BEGIN_ARRAY,但是BEGIN_OBJECT。
这个的任何简单解决方案?
答案 0 :(得分:0)
假设s
是你的字符串:
JSONObject mJson = new JSONObject(s);
JSONObject mInnerJson = mJson.getJSONObject("USER_DATA");
String mUserName = mInnerJson.getString("USER_NAME");
String mPermission = mInnerJson.getString("PERMISSIONS");
然后您可以根据需要使用字符串。
答案 1 :(得分:0)
我更喜欢使用由GSON填充的GSON和Custom类。
定义 UserData.java 类:
public class UserData {
@SerializedName("USER_NAME")
private String userName;
@SerializedName("PERMISSIONS")
private String permissions;
public String getUserName() {
return userName;
}
public String getPermissions() {
return permissions;
}
}
定义其容器 UserDataHolder.java 类
public class UserDataHolder {
@SerializedName("USER_DATA")
private UserData userData;
public UserData getUserData() {
return userData;
}
}
尝试以下代码:
String jsonString = "{\"USER_DATA\":{\"USER_NAME\":\"John\",\"PERMISSIONS\" : \"Admin\"}}";
GsonBuilder builder = new GsonBuilder();
Gson gson = builder.create();
UserDataHolder userDataHolder = gson.fromJson(jsonString, UserDataHolder.class);
UserData userData = userDataHolder.getUserData();
// get user name and use it
userData.getUserName();
// get user permissions and use it
userData.getPermissions();
注意:我喜欢用camel case标准编写代码,所以我使用了SerializedName
注释。如果要使用com.google.gson.annotations.SerializedName
注释,请不要忘记在自定义类中导入SerializedName
。