我正在尝试从反序列化的json对象的内部类中访问变量。以下是我用过的代码。
package jsonparser;
public class JsonParser {
private long uid = 0;
private String username, secret, filter, machine_id, access_token,
session_key = null;
public JsonParser() {
}
public static class Profile {
private String last_name, first_name, pic_square, name = null;
private long uid = 0;
final JsonParser outer = JsonParser.this;
public String getLast_name() {
return last_name;
}
public void setLast_name(String last_name) {
this.last_name = last_name;
}
public String getFirst_name() {
return first_name;
}
public void setFirst_name(String first_name) {
this.first_name = first_name;
}
public String getPic_square() {
return pic_square;
}
public void setPic_square(String pic_square) {
this.pic_square = pic_square;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public long getUid() {
return uid;
}
public void setUid(long uid) {
this.uid = uid;
}
public Profile() {
}
}
}
在另一堂课中:
JsonParser jp = gson.fromJson(Data, JsonParser.class);
数据如下所示:
{
"uid": 123,
"username": "Hello",
"secret": "87920",
"filter": "nf",
"machine_id": "machine_id",
"access_token": "access_token",
"session_key": "123e",
"profile": {
"last_name": "Tan",
"uid": 123,
"first_name": "Sally",
"pic_square": "url.jpg",
"name": "Sally Tan"
}
}
我如何能够从jp对象访问配置文件内部类中的last_name?
答案 0 :(得分:0)
添加字段
private Profile profile;
public Profile getProfile() { return profile; }
到外层JsonParser
。然后你可以使用
jp.getProfile().getLast_name();
注意:名称JsonParser
令人困惑,因为它不会解析任何内容 - 它会存储解析结果。将其重命名为Config
或类似的内容。
答案 1 :(得分:0)
首先删除
final JsonParser outer = JsonParser.this;
来自您的代码。这是一种非法构造,因为无法从静态上下文引用this
。
然后添加
private Profile profile;
到JsonParser类的正下方,其他成员的定义如username,secret,...
有了这个成员,GSon Parser将在您致电gson.fromJson(...)
时填写。
您可以添加一个getter方法来从外部访问您的子结构。