首页 > 解决方案 > 在JAVA中的某个字段中将hashmap序列化为json

问题描述

我需要按特定顺序将映射序列化为 json。

这是地图

HashMap<String, String> dataMap = { "CompanyCode": "4", "EntyyCode": "2002296", "SubEntityCode": "000", "ContractNumber": "52504467115", "Progressive Contract": "0", “DocumentNumber”:“200003333494028”,“LogonUserName”:“AR333”,“Progressive Title”:“0”}

这是我想要的 json 模型:

{
     "Policy": {
         "ContractNumber": "52504467115",
         "ProgressiveContract": "0"
     },
     "Title": {
         "LogonUserName": "AR333",
         "ProgressiveTitle": "0"
     },
     "BusinessChannel": {
         "CompanyCode": "4",
         "EntyyCode": "2002296",
         "SubEntityCode": "000"
     },
     "Document": {
         "DocumentNumber": "200003333494028"
     }
}

我需要将此地图转换为 JSON 字符串。我知道这可以使用 Jackson 来完成,如下所示:

新的 ObjectMapper().writeValueAsString(map);

我如何使用杰克逊做到这一点?或者在Java中有没有其他方法可以做到这一点?

谢谢

标签: javajsonserializationjackson

解决方案


首先,您要求的解决方案包含第二个问题:分区。这些项目不仅必须包含特定的顺序,而且还必须以某种方式划分为不同的类别。在 Java 中,这些类别通常对应于它们自己的类或最近的记录。然后顶级类(对应于 JSON 的未命名的外部对象)确定排序,因此(名称Contract是我的选择):

record Contract(
        Policy policy, 
        Title title, 
        BusinessChannel businessChannel, 
        Document document )
{
}

Contract 的每个属性都有自己的类,例如:

record Policy( String contractNumber, int progressiveContract )

等。序列化合约然后递归地序列化它的每个参数,并以所需的结果作为结果。这将是“标准”方式。

因此,由于您从 a 开始HashMap,根据合同,它不能保证排序,更不用说将其内容划分为子对象的简单方法,您可以尝试两件事:

  • 重新考虑使用地图。切换到类结构会自动处理结构。
  • 按顺序手动流式传输和转换值(或使用例如 aTreeMap和 custom Comparator),然后对值本身进行分区。这可能需要比地图保存更多的工作。

推荐阅读