我是JSON Universe的新手,并且想以有意义的方式在JSON文件中存储多个JSONObject。 JSONObjects以字符串的形式出现,该字符串以该函数的JSON语法格式设置,具有多个属性:
例如:
{"name":"Peter","ID":"bc6fe168-e73f-48c9-b421-ad3c4c424392", "Age":"23","Comment":"I am a new User"}
我的想法是,我加载json文件并将条目存储在列表中。然后,我检查UUID是否已在其中。如果不是,那么我将在列表末尾创建一个新条目,如果已经准备好了,我将更新该条目的其他属性。
这是我到目前为止所拥有的:
public void updateFile(String user) {
/* String to JSONObject */
JSONObject newUser = new JSONObject(content);
/* Load JSON File */
String content = readFile("C:\\localProjects\\list.json");
/* Add or update "newUser" */
if(boolean isNew = containsID(getID(newUser),content))
content.append(user);
else
updateUser(newUser);
}
此方法适用于我的用例,但对我而言似乎效率不高,并且实际上不是OOP方法。这也不是很严格,例如,如果我在另一个条目中添加了一个用作UUID的名称的新用户,则会编辑错误的用户,而不是将其添加为新用户。
有没有可以轻松帮助我的功能,例如: 将现有的JSON加载为JSON-List,遍历Object中的JSON对象,编辑特定的变量?
答案 0 :(得分:2)
使用Jackson之类的工具,您可以
User.java
,甚至可以使用JsonNode HashMap
中standard out
示例
此示例将用户数组读取到JsonNode
个对象。通过JsonPointer语法访问ID
字段。
@Test
public void json3() throws JsonParseException, JsonMappingException, IOException {
Map<String, JsonNode> store = new HashMap<>();
ObjectMapper mapper = new ObjectMapper();
JsonNode users = mapper.readValue(
"[{\"name\":\"Peter\",\"ID\":\"bc6fe168-e73f-48c9-b421-ad3c4c424392\", \"Age\":\"23\",\"Comment\":\"I am a new User\"},{\"name\":\"jschnasse\",\"ID\":\"bc6fe168-e73f-48c9-b421-ad3c4c424393\", \"Age\":\"well\",\"Comment\":\"I am a fun User\"}]",
JsonNode.class);
users.forEach((user) -> {
String id = user.at("/ID").asText();
if (!store.containsKey(id)) {
store.put(id, user);
} else {
/* Do something else */
}
});
System.out.println(toString(store.values()));
}
public String toString(Object obj) {
try (StringWriter w = new StringWriter();) {
new ObjectMapper().configure(SerializationFeature.INDENT_OUTPUT, true).writeValue(w, obj);
return w.toString();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
打印
[ {
"name" : "jschnasse",
"ID" : "bc6fe168-e73f-48c9-b421-ad3c4c424393",
"Age" : "well",
"Comment" : "I am a fun User"
}, {
"name" : "Peter",
"ID" : "bc6fe168-e73f-48c9-b421-ad3c4c424392",
"Age" : "23",
"Comment" : "I am a new User"
} ]