Java-合并JSON文件
我正在构建一个更新程序util来更新我的应用程序。 我需要保存以前版本的配置文件。 一些配置文件是JSON文件。 有没有一种更新JSON文件的方法可以让我保留旧的值 但是如果有新的对象或关键点,它们也会被保存吗 例如: 版本1 json文件:Java-合并JSON文件,java,json,Java,Json,我正在构建一个更新程序util来更新我的应用程序。 我需要保存以前版本的配置文件。 一些配置文件是JSON文件。 有没有一种更新JSON文件的方法可以让我保留旧的值 但是如果有新的对象或关键点,它们也会被保存吗 例如: 版本1 json文件: { "name": "demo", "description": "Parse some JSON data", "location": "New York" } { "name": "demo", "descri
{
"name": "demo",
"description": "Parse some JSON data",
"location": "New York"
}
{
"name": "demo",
"description": "Parse some JSON data",
"location": "London",
"day": "Monday"
}
版本2 json文件:
{
"name": "demo",
"description": "Parse some JSON data",
"location": "New York"
}
{
"name": "demo",
"description": "Parse some JSON data",
"location": "London",
"day": "Monday"
}
合并后需要的json文件:
{
"name": "demo",
"description": "Parse some JSON data",
"location": "New York",
"day": "Monday"
}
有没有办法在没有任何外部库的情况下做到这一点?正如@cricket\u 007所建议的,这个解决方案对我很有效:
public void mergeJsonsFiles(File newJson, File oldJson) throws Exception {
HashMap<String, Object> newMap = convertJsonToMap(newJson);
HashMap<String, Object> oldMap = convertJsonToMap(oldJson);
for (Entry<String, Object> entry : oldMap.entrySet()) {
if (newMap.get(entry.getKey()) == null) {
newMap.put(entry.getKey(), entry.getValue());
}
}
ObjectMapper mapper = new ObjectMapper();
String jsonFromMap = mapper.writeValueAsString(newMap);
PrintWriter writer = new PrintWriter(newJson);
writer.write(jsonFromMap);
writer.close();
}
private HashMap<String, Object> convertJsonToMap(File json) {
ObjectMapper mapper = new ObjectMapper();
HashMap<String, Object> map = new HashMap<String, Object>();
try {
map = mapper.readValue(json, new TypeReference<HashMap<String, Object>>(){});
} catch (IOException e) {
map.clear();
}
return map;
}
public void mergeJsonsFiles(文件newJson,文件oldJson)引发异常{
HashMap newMap=convertJsonToMap(newJson);
HashMap oldMap=convertJsonToMap(oldJson);
for(条目:oldMap.entrySet()){
if(newMap.get(entry.getKey())==null){
newMap.put(entry.getKey(),entry.getValue());
}
}
ObjectMapper mapper=新的ObjectMapper();
字符串jsonFromMap=mapper.writeValueAsString(newMap);
PrintWriter=新的PrintWriter(newJson);
writer.write(jsonFromMap);
writer.close();
}
私有HashMap convertJsonToMap(文件json){
ObjectMapper mapper=新的ObjectMapper();
HashMap=newHashMap();
试一试{
map=mapper.readValue(json,newTypeReference(){});
}捕获(IOE异常){
map.clear();
}
返回图;
}
正如@cricket\u 007所建议的,这个解决方案对我很有效:
public void mergeJsonsFiles(File newJson, File oldJson) throws Exception {
HashMap<String, Object> newMap = convertJsonToMap(newJson);
HashMap<String, Object> oldMap = convertJsonToMap(oldJson);
for (Entry<String, Object> entry : oldMap.entrySet()) {
if (newMap.get(entry.getKey()) == null) {
newMap.put(entry.getKey(), entry.getValue());
}
}
ObjectMapper mapper = new ObjectMapper();
String jsonFromMap = mapper.writeValueAsString(newMap);
PrintWriter writer = new PrintWriter(newJson);
writer.write(jsonFromMap);
writer.close();
}
private HashMap<String, Object> convertJsonToMap(File json) {
ObjectMapper mapper = new ObjectMapper();
HashMap<String, Object> map = new HashMap<String, Object>();
try {
map = mapper.readValue(json, new TypeReference<HashMap<String, Object>>(){});
} catch (IOException e) {
map.clear();
}
return map;
}
public void mergeJsonsFiles(文件newJson,文件oldJson)引发异常{
HashMap newMap=convertJsonToMap(newJson);
HashMap oldMap=convertJsonToMap(oldJson);
for(条目:oldMap.entrySet()){
if(newMap.get(entry.getKey())==null){
newMap.put(entry.getKey(),entry.getValue());
}
}
ObjectMapper mapper=新的ObjectMapper();
字符串jsonFromMap=mapper.writeValueAsString(newMap);
PrintWriter=新的PrintWriter(newJson);
writer.write(jsonFromMap);
writer.close();
}
私有HashMap convertJsonToMap(文件json){
ObjectMapper mapper=新的ObjectMapper();
HashMap=newHashMap();
试一试{
map=mapper.readValue(json,newTypeReference(){});
}捕获(IOE异常){
map.clear();
}
返回图;
}
您使用的是JSON库还是手工编写JSON?目前我没有使用JSON库,JSON是作为文件提供给我的,我不知道它们最初是如何编写的。请使用库。将两者都放入Hashmap中。重新生成JSON对象除非您想要“位置”:[“纽约”,“伦敦”]
,否则它会变得更复杂。您看过了吗?您使用的是JSON库还是手工编写的JSON?目前我没有使用JSON库,JSON是作为文件提供给我的,我不知道它们最初是如何编写的。使用库。将两者都放入Hashmap中。重建JSON对象除非您想要“位置”:[“纽约”、“伦敦”]
,否则它会变得更复杂。您看过了吗?