【问题标题】:JSON pretty-print without changing the orderJSON 漂亮打印而不更改顺序
【发布时间】:2013-07-21 19:45:42
【问题描述】:

我使用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

【问题讨论】:

  • 看看能不能帮到你:stackoverflow.com/questions/6541757/…
  • @carl-lopez Jackson 和 Gson 有什么关系?
  • 可以换成你想的那样
  • 致 OP:您不能不修改 Gson 的源代码(或编写自己的打印代码)。这是“漂亮印刷”的一部分。
  • 呃,您使用的是两个完全不同的 JSON 解析库;为什么?这甚至可以工作的唯一原因是因为org.json.simple.JSONObject 扩展了HashMap。 (好眼光@MichałZiober - 我错过了)。

标签: java json gson


【解决方案1】:

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

【讨论】:

  • 我在使用 Maven 下载和编辑 simple-json 的源代码时遇到问题。有进一步的阅读吗?
  • 为什么要换库?这不是一个解决方案。为什么你不想改变你的源代码?可以给我们看看你的真实源代码吗?
  • 我的源代码没有什么花哨的。其他 JSONObjects 中只有许多 JJSONArrays 和 SONObjects。这就是我考虑更换图书馆的原因。您所说的“这不是解决方案”是什么意思。我认为在simple-json 的原始实现中将HashMap 更改为LinkedHashMap 可以解决问题。您是说这不是最佳做法还是根本行不通?
  • 您必须在源代码中将 JSONObjects 更改为 LinkedHashMap。我不敢相信你有这么多 JSONObjects 比你的源代码更容易改变库。如果您想更改库 - 好的,它会起作用,但确实有问题。您的源代码中有多少 JSONObjects 实例?替换真的很容易,因为 LinkedHashMap 也有“put”方法。所以你只需要改变对象的类型。
【解决方案2】:

没有。 JSONObject 是一个HashMap,没有维护您put 进入其中的条目的顺序。

【讨论】:

    猜你喜欢
    • 2023-04-07
    • 2018-06-26
    • 2014-05-19
    • 2021-01-31
    • 2014-05-12
    • 2021-06-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多