为了账号安全,请及时绑定邮箱和手机立即绑定

将特定的 JSON 映射到 Java 对象

将特定的 JSON 映射到 Java 对象

茅侃侃 2021-06-08 17:54:52
我正在尝试将特定的 JSON 映射到我的 Java 模型类。并且无法将其映射到 Java 对象。我正在使用fastxml (jackson) 将 JSON 映射到我下面的 Java 模型类 - CurrencyModel.java。这个 JSON 以 ' [ ' 开头,这可能意味着它是一个数组。我无法将它映射到我的类 CurrencyModel.javaimport com.fasterxml.jackson.annotation.JsonProperty;import lombok.AllArgsConstructor;import lombok.Data;import lombok.NoArgsConstructor;import java.util.ArrayList;import java.util.List;class CurrencyModel {    protected List<Currencies> currencies;    protected List<CurrenciesRates> currenciesRates;    @Data    @NoArgsConstructor    @AllArgsConstructor    static class Currencies {        @JsonProperty("table")        private String table;        @JsonProperty("no")        private String no;        @JsonProperty("effectiveDate")        private String effectiveDate;        @JsonProperty("rates")        private ArrayList<CurrencyRatesModel> rates;    }    @Data    @NoArgsConstructor    @AllArgsConstructor    static class CurrenciesRates {        @JsonProperty("currency")        private String currency;        @JsonProperty("code")        private String code;        @JsonProperty("mid")        private String mid;    }}并且在 String 变量下面有 JSON[  {    "table": "A",    "no": "064/A/NBP/2013",    "effectiveDate": "2013-04-02",    "rates": [      {        "currency": "bat (Tajlandia)",        "code": "THB",        "mid": 0.1108      },      {        "currency": "dolar amerykański",        "code": "USD",        "mid": 3.2552      },      {        "currency": "dolar australijski",        "code": "AUD",        "mid": 3.4048      }    ]  }]我正在尝试使用以下方法运行此代码:
查看完整描述

2 回答

?
慕标5832272

TA贡献1966条经验 获得超4个赞

我看到你的 java 类有问题。我已经执行了您的输入 json 并附带了下面提到的 java 类映射。


@Data

@NoArgsConstructor

@AllArgsConstructor


public class CurrencyModel {


    @JsonProperty("table")

    private String table;


    @JsonProperty("no")

    private String no;


    @JsonProperty("effectiveDate")

    private String effectiveDate;


    @JsonProperty("rates")

    private ArrayList<CurrenciesRates> rates;


    @Data

    @NoArgsConstructor

    @AllArgsConstructor

    static class CurrenciesRates {

        @JsonProperty("currency")

        private String currency;


        @JsonProperty("code")

        private String code;


        @JsonProperty("mid")

        private String mid;

    }

}

还有你的主课,


ObjectMapper objectMapper = new ObjectMapper();

        final String output = "[{\"table\": \"A\", \"no\": \"064/A/NBP/2013\",\"effectiveDate\": \"2013-04-02\",\"rates\": [{\"currency\": \"bat (Tajlandia)\",\"code\": \"THB\",\"mid\": 0.1108},{\"currency\": \"dolar amerykański\",\"code\": \"USD\",\"mid\": 3.2552},{\"currency\": \"dolar australijski\",\"code\": \"AUD\",\"mid\": 3.4048}]}]";


        List<CurrencyModel> myObjects = objectMapper.readValue(output, new TypeReference<List<CurrencyModel>>() {

        });


查看完整回答
反对 回复 2021-06-17
?
元芳怎么了

TA贡献1798条经验 获得超7个赞

您的 json 包含对象列表。所以用TypeReference


ObjectMapper objectMapper = new ObjectMapper();

    final String output = "[{\"table\": \"A\", \"no\": \"064/A/NBP/2013\",\"effectiveDate\": \"2013-04-02\",\"rates\": [{\"currency\": \"bat (Tajlandia)\",\"code\": \"THB\",\"mid\": 0.1108},{\"currency\": \"dolar amerykański\",\"code\": \"USD\",\"mid\": 3.2552},{\"currency\": \"dolar australijski\",\"code\": \"AUD\",\"mid\": 3.4048}]}]";

    objectMapper.setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY);

    List<CurrencyModel> currencyModelList = objectMapper.readValue(output, new TypeReference<List<CurrencyModel.Currencies>>(){});

    System.out.println(currencyModelList);


查看完整回答
反对 回复 2021-06-17
  • 2 回答
  • 0 关注
  • 120 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信