修改JSON-File并将其作为文件以与Java完全相同的顺序保存

时间:2016-04-22 10:47:06

标签: java arrays json

我有一个想要读取的json文件,然后修改特定键的值,然后以完全相同的顺序保存它。

我成功完成了修改,但是在JSONArray中,现在把它写成JSON-File(JSONString)时,我遇到了2个问题:

1)参数(键)的顺序改变

2)德语字母被编码为奇怪的字符..

那么如何进行修改,保存更改的顺序与读取的顺序完全相同,并让德语字符保持原样?

这是我的json文件的结构:

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;
    }

}

我想修改detailsKey1的值!我想用一个新字符串为我文件中的每个对象更改该链接。

这是我的代码:

Version.Parse

正如你所看到/测试的那样,更改发生在数组中,但我现在不知道如何更进一步,将我的新(更新)文件保存在我的桌面中,并使用相同的键。

2 个答案:

答案 0 :(得分:0)

根据JSON Spec,JSON对象是无序的名称/值对集合;所以我首先要质疑这个功能的必要性。

此外,虽然java中的JsonArray库被写入此规范,但您可以获取JSON中的项目索引,但JsonWriter将不允许您指定要插入JSON的索引

如果订单是必需的,我建议你自己编写一个不符合JSON规范的解析器,那么所需的努力似乎超过任何潜在的好处。

答案 1 :(得分:0)

Json不会维护数据中对象的排序......它符合规范......请通过此链接了解更多信息...... link

关于编码问题尝试使用google的json库,称为gson ....以下代码在打印数据时工作得很好......

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>