【问题标题】:Serialize a hashmap to a json in a certain feilds in JAVA在JAVA中的某些字段中将hashmap序列化为json
【发布时间】:2021-09-16 06:45:25
【问题描述】:

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

这是地图

HashMap dataMap = { "公司代码": "4", "EntyyCode": "2002296", “子实体代码”:“000”, "合同编号": "52504467115", “渐进式合同”:“0”, "DocumentNumber": "200003333494028", "登录用户名": "AR333", “渐进式标题”:“0” }

这是我想要的json模型:

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

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

new ObjectMapper().writeValueAsString(map);

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

谢谢

【问题讨论】:

    标签: java json serialization jackson


    【解决方案1】:

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

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

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

    record Policy( String contractNumber, int progressiveContract )
    

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-24
      • 2019-05-03
      • 2019-11-27
      相关资源
      最近更新 更多