JSON 使用杰克逊库相同对象的字段,但在必要时打印不同的值

Posted

技术标签:

【中文标题】JSON 使用杰克逊库相同对象的字段,但在必要时打印不同的值【英文标题】:JSON using Jackson Library same object`s fields but printing different values when nessecary 【发布时间】:2022-01-14 01:26:39 【问题描述】:

我希望您只查看下面 json 数据的 PlasticInfo 部分。如您所见,它的一部分仅输出 2 个值,而另一部分则输出 3 个值。

让我感到困惑的是它们是单独的对象还是同一个对象只是使用特殊注释来做到这一点?如果是同一个对象,我可以使用什么注释?那么我怎样才能使用同一个对象来完成以下部分呢?假设它们是同一个对象并且有 3 个变量,在这部分我希望它在必要时输出 2,在另一部分我希望它打印 3 个值。


  "code": 0,
  "message": "Successfully processed",
  "result": 
    "ContractRs": 
      "Contract": 
        "OrderDprt": "",
        "ClientType": "",
        "ClientCategory": "",
        "ContractIDT": 
          "ContractNumber": "",
          "RBSNumber": "",
          "Client": 
            "OrderDprt": "",
            "ClientType": "",
            "ClientCategory": "",
            "ClientInfo": 
              "ClientNumber": "",
              "RegNumber": "",
              "ShortName": "   ",
              "FirstName": "",
              "LastName": "",
              "MiddleName": " ",
              "SecurityName": "",
              "Country": "",
              "MaritalStatus": "",
              "BirthDate": "",
              "BirthPlace": ""
            ,
            "PlasticInfo": 
              "FirstName": "",
              "LastName": ""
            ,
            "PhoneList": 
              "Phone": 
                "PhoneType": "",
                "PhoneNumber": ""
              
            ,
            "DateOpen": "",
            "BaseAddress": 
              "City": "",
              "PostalCode": "",
              "AddressLine1": ""
            
          
        ,
        "Currency": "",
        "ContractName": "",
        "Product": 
          "AddInfo": 
            "Parm": 
              "ParmCode": "",
              "Value": ""
            
          
        ,
        "ProductionParms": 
          "CardExpiry": "",
          "SequenceNumber": ""
        ,
        "PlasticInfo": 
          "FirstName": "",
          "LastName": "",
          "CompanyName": ""
        ,
        "DateOpen": "",
        "AddContractInfo": 
          "ExtraRs": ""
        
      ,
      "Info": 
        "Status": 
          "StatusClass": "",
          "StatusCode": "",
          "StatusDetails": "",
          "ProductionStatus": ""
        ,
        "Balances": [
          
            "Name": "",
            "Type": "",
            "Amount": 0,
            "Currency": ""
          ,
          
            "Name": "",
            "Type": "",
            "Amount": 0.00,
            "Currency": ""
          
        ],
        "RiskGroup": ""
      
    
  

【问题讨论】:

一种可能性是:Jackson 中有一个配置指示“在序列化期间忽略空值”。它可能在配置中的某处启用。一种方法是objectMapper.setSerializationInclusion( JsonInclude.Include.NON_NULL )。你可能想检查一下。 【参考方案1】:

我已经解决了我的问题,我真正想要的是 @JsonIgnoreProperties 注释,它忽略指定的字段。

【讨论】:

以上是关于JSON 使用杰克逊库相同对象的字段,但在必要时打印不同的值的主要内容,如果未能解决你的问题,请参考以下文章

如何区分空值字段与杰克逊库中的缺失字段

使用 Jackson 忽略 JSON 对象上的新字段 [重复]

如何将 JSON 字段名称映射到不同的对象字段名称?

杰克逊 - 序列化日期对象

某些字段的杰克逊 JSON 自定义序列化

杰克逊克服下划线支持骆驼案