GSON - 如何轻松解析这个Json?

时间:2013-11-19 20:14:21

标签: android json gson

大家好!
这是我的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。

这个的任何简单解决方案?

2 个答案:

答案 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