java - 在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中有没有其他方法可以做到这一点?
谢谢
解决方案
首先,您要求的解决方案包含第二个问题:分区。这些项目不仅必须包含特定的顺序,而且还必须以某种方式划分为不同的类别。在 Java 中,这些类别通常对应于它们自己的类或最近的记录。然后顶级类(对应于 JSON 的未命名的外部对象)确定排序,因此(名称Contract
是我的选择):
record Contract(
Policy policy,
Title title,
BusinessChannel businessChannel,
Document document )
{
}
Contract 的每个属性都有自己的类,例如:
record Policy( String contractNumber, int progressiveContract )
等。序列化合约然后递归地序列化它的每个参数,并以所需的结果作为结果。这将是“标准”方式。
因此,由于您从 a 开始HashMap
,根据合同,它不能保证排序,更不用说将其内容划分为子对象的简单方法,您可以尝试两件事:
- 重新考虑使用地图。切换到类结构会自动处理结构。
- 按顺序手动流式传输和转换值(或使用例如 a
TreeMap
和 customComparator
),然后对值本身进行分区。这可能需要比地图保存更多的工作。
推荐阅读
- tensorflow - 在 GCP 上的 Ubuntu 16.04 实例上运行使用 tensorflow 的烧瓶应用程序,模型运行但预测与本地主机上的不同
- c++ - 为什么这个 C++ 程序没有显示任何输出?
- html - 移动设备上的用户输入和占位符文本对齐
- laravel - 指令名称 [] 无效。指令名称只能包含字母数字字符和下划线
- c# - 从 xml 继承/实现 List/ICollection/等反序列化类型
- python - 正权重和负权重
- powershell - 为什么 Powershell 的 Set-Content -Value 参数不能正确读取管道变量
- python-3.x - 如何让智能感知在 vscode 中工作,而 python 代码位于不同的模块中
- php - 无论如何在检查时设置推荐人喜欢隐藏?
- reactjs - 正确的键使用反应