Jackson 在 Android 上按字母顺序对 JSON 序列化输出键进行排序

Posted

技术标签:

【中文标题】Jackson 在 Android 上按字母顺序对 JSON 序列化输出键进行排序【英文标题】:Jackson sorts JSON serialized output keys alphabetically on Android 【发布时间】:2019-06-30 18:13:34 【问题描述】:

我正在构建一个 android 应用程序,我希望它能够将一些 Java 对象序列化为字符串 JSON 输出。我正在使用 Jackson 库。

我已经构建了一个方法,该方法将对象作为输入并输出字符串 JSON。 当这段代码在我的计算机上运行时,我得到了正确的 JSON 输出,这意味着输出键保持它们在我的对象中声明的顺序。当代码在使用 Android Studio 的 android 手机上运行时,按键按字母顺序排序。 在我的情况下这是不需要的。

代码如下:

public String toJSON(Object obj)
    ObjectMapper mapper = new ObjectMapper();
    mapper.setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY);

    try 

        // Convert object to JSON string
        String jsonInString = mapper.writeValueAsString(obj);
        return jsonInString;

     catch (JsonGenerationException e) 
        e.printStackTrace();
        return "Error";
     catch (JsonMappingException e) 
        e.printStackTrace();
        return "Error";
     catch (IOException e) 
        e.printStackTrace();
        return "Error";
    

【问题讨论】:

【参考方案1】:

您可以在使用注释时明确告诉杰克逊您希望属性的顺序。看到这个...

https://www.logicbig.com/tutorials/misc/jackson/json-property-order-annotation.html

【讨论】:

您好,感谢您的回答。这解决了问题。但是,我不明白为什么杰克逊在 Android 上按字母顺序排序,而不是在我的 PC 上。调用代码是一样的! 您在PCAndroid 上使用相同版本的Jackson 库吗? @MichałZiober 是的,jars 已加载到 Android Studio 中,一切都从那里运行。

以上是关于Jackson 在 Android 上按字母顺序对 JSON 序列化输出键进行排序的主要内容,如果未能解决你的问题,请参考以下文章

在 android 的 google chrome 上按顺序播放声音(考虑到播放声音的新限制)

在 Android 中按字母顺序对 Hashmap 值类型进行排序

Android 按字母顺序对 ListView 进行排序

在Android中按字母顺序排序文件列表,文件夹然后文件

Android GridView 焦点顺序

使用 Jackson 序列化带有排序键的 JSON