我有一个JSON数组,其中包含以下对象:
{
"bjones": {
"fname": "Betty",
"lname": "Jones",
"password": "ababab",
"level": "manager"
}
}
我的User类有一个用户名,需要使用JSON对象的密钥。我如何获得JSON对象的密钥?
我现在拥有的是获取所有内容并创建一个新的User对象,但保留用户名为null。这是可以理解的,因为我的JSON对象不包含“username”:“value”的键/值对。
Gson gson = new Gson();
JsonParser p = new JsonParser();
JsonReader file = new JsonReader(new FileReader(this.filename));
JsonObject result = p.parse(file).getAsJsonObject().getAsJsonObject("bjones");
User newUser = gson.fromJson(result, User.class);
// newUser.username = null
// newUser.fname = "Betty"
// newUser.lname = "Jones"
// newUser.password = "ababab"
// newUser.level = "manager"
编辑: 我正试图用Gson将“bjones”插入newUser.username,对不起澄清
答案 0 :(得分:19)
使用entrySet获取密钥。遍历条目并为每个密钥创建一个用户。
JsonObject result = p.parse(file).getAsJsonObject();
Set<Map.Entry<String, JsonElement>> entrySet = result.entrySet();
for(Map.Entry<String, JsonElement> entry : entrySet) {
User newUser = gson.fromJson(p.getAsJsonObject(entry.getKey()), User.class);
newUser.username = entry.getKey();
//code...
}
答案 1 :(得分:1)
使用 keySet()直接排除了迭代的必要性:
ArrayList<String> objectKeys =
new ArrayList<String>(
myJsonObject.keySet());
答案 2 :(得分:0)
你的JSON相当简单,所以即使是手动排序的方法(比如为类型创建字符串等)也能正常工作。
对于复杂的JSON(JSON中有许多嵌套的复杂对象和其他复杂对象的列表),您可以使用http://www.jsonschema2pojo.org/
等工具为JSON创建POJO然后只是:
final Gson gson = new Gson();
final MyJsonModel obj = gson.fromJson(response, MyJsonModel.class);
// Just access your stuff in object. Example
System.out.println(obj.getResponse().getResults().get(0).getId());