7

我使用json-simple并希望有漂亮的打印用于调试目的。

这是一个非常相关的 SO 问题:Pretty-Print JSON in Java

但是,给定线程中的答案不仅修复了缩进,而且还使用键的字符串顺序将项目的顺序更改为 [a ... z]。

有没有办法在不改变我的 JSONObject 中项目的顺序的情况下修复缩进?

例子:

JSONObject myJSon = new JSONObject();
myJSon.put("zzz", 1);
myJSon.put("aaa", 1);

Gson gson = new GsonBuilder().setPrettyPrinting().create();
System.out.println( gson.toJson(myJSon) );

输出:

{
  "aaa": 1,
  "zzz": 1
}

期望的输出:

{
  "zzz": 1,
  "aaa": 1
}

编辑:我正在使用:org.json.simple.JSONObject

4

2 回答 2

9

org.json.simple.JSONObject类扩展java.util.HashMap,这就是您在输出中看到此属性顺序的原因。setPrettyPrinting()方法不会改变顺序。您可以将其从源代码中删除,并且没有任何变化。如果你想保持顺序,你可以使用java.util.LinkedHashMap而不是org.json.simple.JSONObject.

简单的例子:

import java.util.LinkedHashMap;
import java.util.Map;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

public class GsonProgram {

    public static void main(String[] args) throws Exception {
        Map<String, Integer> myJSon = new LinkedHashMap<String, Integer>();
        myJSon.put("zzz", 1);
        myJSon.put("aaa", 1);

        Gson gson = new GsonBuilder().setPrettyPrinting().create();
        System.out.println(gson.toJson(myJSon));
    }
}
于 2013-07-22T22:56:55.287 回答
0

No. JSONObjectis a ,您进入其中HashMap的条目没有顺序维护。put

于 2013-07-22T22:56:46.503 回答