【问题标题】:Trouble parsing nested json and changing response structure解析嵌套 json 和更改响应结构时遇到问题
【发布时间】:2021-09-09 23:53:07
【问题描述】:

我在解析 json 并稍微更改响应结构时遇到问题。下面是我要解析的 json -

{
  "subRecords": [
    {
      "row": [
        {
          "practice": [
            {
              "addressId": "123",
              "name":"JON"
     
            }
          ]
        }
      ],
      "Key": "123456-ABC"
    }
  ]
}

我的预期输出是没有row -

{
  "subRecords": [
    {
      "practice": [
        {
          "addressId": "123",
          "name": "JON"
        }
      ],
      "Key": "123456-ABC"
    }
  ]
}

下面是我的pojo-

@Getter
@Setter
@ToString
@JsonInclude(JsonInclude.Include.NON_NULL)
public class Test{
     private Map<String,Object>Key;
    
    private List<Map<String,Object>>practice;
    
        private List<Map<String, Object>> subRecords;
    
    
        public List<Map<String, Object>> getSubRecords() {
            return subRecords;
        }
    
        public void setSubRecords(List<Map<String, Object>> row) {
    
           this.practice= (List<Map<String, Object>>) row.get(0).get("practice");
        }
}

但我不断收到如下解析错误-

 "errors": {
        "status": "500",
        "title": "Internal Server Error",
        "detail": "N/A\n at [Source: (String)\

我不确定我是否正确访问了 json,我将不胜感激。

【问题讨论】:

  • 请将解析错误和正在解析的代码以及完整的 POJO 添加到您的问题中。
  • @tgdavies 我尝试编辑我的 pojo 以获得更好的理解。不幸的是,我无法在此处粘贴错误提到的实际 json,但与我上面的结构相似
  • 编写一个小程序,将一个静态的 JSON 字符串解析成一个 POJO,与你的真实 POJO 相同,并产生相同的错误。只需根据隐私需要更改名称即可。
  • 您的 POJO Test 似乎与您的 JSON 完全不同。

标签: java spring jackson


【解决方案1】:

要将第一个 JSON 解析为 Java 对象,您需要以下数据模型:

public class Original {
    private List<OriginalSubRecords> subRecords;
}

public class OriginalSubRecords {
    private OriginalSubRecordsRow row;
    private String Key;
}

public class OriginalSubRecordsRow {
    private List<OriginalSubRecordsRowPractice> practice;
}

public class OriginalSubRecordsRowPractice {
    private String addressId;
    private String name;
}

然后你需要将Original映射到Restructured对象,数据模型如下:

public class Restructured {
    private List<RestructuredSubRecords> subRecords;
}

public class RestructuredSubRecords {
    private List<RestructuredSubRecordsPractice> practice;
    private String Key;
}

public class RestructuredSubRecordsPractice {
    private String addressId;
    private String name;
}

映射它们非常简单,唯一的细节是您似乎只对row 中的第一个practice 感兴趣。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-31
    相关资源
    最近更新 更多