2013-01-08 56 views
0

我有以上這樣的如何獲取Gson/Json中對象標識符的名稱?

{Users:[{ 
user1 :{ 
email: "sth" 
phone : "sth" 
}}, 
user2:{ 
email:"sth" 
phone:"sth" 
}]} 

一個JSON文件是隻讀文件。我使用下面的代碼:

BufferedReader br = new BufferedReader(fileReader); 
    Myclass myclass= gson.fromJson(br, Myclass.class); 

因此,我可以用我的課獲得電子郵件和電話的值。但我也想要用戶名。 即user1的電子郵件電話 user2的電子郵件手機

回答

0

有用戶名作爲另一個屬性,如:

{Users:[{ name: "user1", email: "sth", phone : "sth" }, {name: "user2", email:"sth", phone:"sth"}]} 

給予更多的細節,這將有助於如果你能告訴我們MYCLASS,但它應該是這個樣子這樣的:

public class Myclass [ 

    private List<User> Users; 

    public List<User> getUsers() { 
     return Users; 
    } 

    public void setUsers(List<User> Users) { 
     this.Users = Users; 
    } 
} 

public class User { 

    private String email; 

    private String name; 

    private String phone; 

    public String getEmail() { 
     return email; 
    } 

    public void setEmail(String email) { 
     this.email = email; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public String getPhone() { 
     return phone; 
    } 

    public void setPhone(String phone) { 
     this.phone = phone; 
    } 
} 

這將適用於您的代碼。

+0

感謝FO rthe的答案,但正如我所說,我不能修改JSON文件。我曾想過這個解決方案,但我不允許修改這個文件。 – bansalnagesh

0

如果你不能修改json,那麼你可能需要編寫自己的解串器。事情是這樣的:

public class UserDeserializer implements JsonDeserializer<User> { 

    @Override 
    public User deserialize(JsonElement jsonElement, Type typeOfT, JsonDeserializationContext context) { 
     Map.Entry<String, User> userAndName = jsonElement.getAsJsonObject().entrySet().iterator().next(); 

     String name = userAndName.getKey(); 

     JsonObject userInfo = userAndName.getValue().getAsJsonObject(); 

     String email = userInfo.get("email").getAsString(); 
     String phone = userInfo.get("phone").getAsString(); 

     return new User(name, email, phone); 
    } 
} 

創建GSON實例時,你會再註冊解串器:

Gson gson = new GsonBuilder() 
    .registerTypeAdapter(User.class, new UserDeserializer()) 
    .create();