[英]Modify JSON-File and save it back as a file in exactly the same order with Java
我有一个要读取的json文件,然后修改特定键的值,然后以完全相同的顺序保存它。
我成功地完成了修改,但是在JSONArray中,现在将其编写为JSON-File(JSONString)时,遇到两个问题:
1)参数(键)的顺序改变
2)德语字母被编码为奇怪的字符。
那么,如何以与读取时完全相同的顺序保存更改,并保留原样的德语字符来进行修改?
这是我的json文件的结构:
[{
"key1": "key here",
"key2": "key2 here",
"key3": "pId here11",
"details": {
"detailsKey1": "https://linkHere.com/conf/conf1/conf2/img/testImage.png",
"detailsKey2": "desc here",
"detailsKey3": "some url here",
"detailsKeys4": "some key here",
"terms": [{
"termsKey1": "über dreißig",
"termsKey2": "mäßig term here"
}]
}
}, {
"key1": "key here",
"key2": "key2 here",
"key3": "pId here11",
"details": {
"detailsKey1": "https://linkHere.com/conf/conf1/conf2/img/testImage.png",
"detailsKey2": "desc here",
"detailsKey3": "some url here",
"detailsKeys4": "some key here",
"terms": [{
"termsKey1": "über dreißig",
"termsKey2": "mäßig term here"
}]
}
}]
我只想修改detailsKey1的值! 我想用新的字符串更改文件中每个对象的链接。
这是我的代码:
public class testi {
public static void main(String[] args) throws JSONException, IOException, NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException {
String jsonOldData = readFile("C:\\Users\\myuser\\Desktop\\img.json");
JSONArray jOldArray = new JSONArray(jsonOldData);
ArrayList<String> myOldArray = new ArrayList<>();
System.out.println("length old: " + jOldArray.length());
for(int i=0; i < jOldArray.length(); i++) {
System.out.println("link here" + i + ": " + jOldArray.getJSONObject(i).getJSONObject("details").getString("detailsKey1"));
if (i == 0) {
jOldArray.getJSONObject(i).getJSONObject("details").put("detailsKey1", "testImage.png");
System.out.println("NEW teaserImage " + i + ": " + jOldArray.getJSONObject(i).getJSONObject("details").getString("detailsKey1"));
}
if (i==2)
System.out.println("teaserImage " + (i-2) + ": " + jOldArray.getJSONObject(i-2).getJSONObject("details").getString("detailsKey1"));
}
}
public static String readFile(String filename) {
String result = "";
try {
BufferedReader br = new BufferedReader(new FileReader(filename));
StringBuilder sb = new StringBuilder();
String line = br.readLine();
while (line != null) {
sb.append(line);
line = br.readLine();
}
result = sb.toString();
} catch(Exception e) {
e.printStackTrace();
}
return result;
}
}
如您所见/测试,更改发生在数组中,但是我不知道现在要怎么做,才能用相同的键将新的(更新的)文件保存在桌面中。
JSON对象是根据JSON Spec的无序名称/值对集合; 所以我首先要问这个功能的必要性。
另外,虽然Java中的JsonArray库是按照此规范编写的,但您可以获取JSON中项目的索引,但是JsonWriter不允许您指定要插入JSON的索引。
如果需要订购,我建议您编写自己的不符合JSON规范的解析器,那么再次需要的工作似乎超过了任何潜在的好处。
Json不会维护数据中对象的顺序...它在规范中。...请通过此链接获取更多信息... 链接
关于编码问题,请尝试使用称为gson的Google json库。...下面的代码可以按原样打印数据...
public static void main(String[] args) {
HashMap<String, String> a = new HashMap<String, String>();
a.put("über dreißig", "mäßig term here");
System.out.println(new Gson().toJson(a));
}
gson的maven依赖关系如下:
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.2.2</version>
</dependency>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.