使用 Java 将 JSON 转换为 POJO 并赋值

Posted

技术标签:

【中文标题】使用 Java 将 JSON 转换为 POJO 并赋值【英文标题】:Converting JSON to POJOs Using Java and assign values 【发布时间】:2021-10-27 07:08:21 【问题描述】:

我有一些 JSON 对象,我需要将它们更改为 JAVA 类并分配给定值。


 "Summary":
  "AccountSummary":
   "Account_number": "324d",
   "Account_name": "John"
  ,
  "Transaction":[
   
    "Date": "2021-08-21",
    "Amount": "20,000"
   ,
   
    "Date": "2021-08-23",
    "Amount": "5,000"
   
  ]
 

这些是我当前的编码,

//The account summary class with assigned value
public class AccountSummary
    @JsonProperty("Account_number")
    public String account_number = "324d";
    @JsonProperty("Account_name")
    public String account_name = "John";


//Transaction class. I want to know how I can assign values
public class Transaction
    @JsonProperty("Date")
    public String date;
    @JsonProperty("Amount")
    public String amount;


// Summary class
public class Summary
    @JsonProperty("AccountSummary")
    public AccountSummary accountSummary;
    @JsonProperty("Transaction")
    public List<Transaction> transaction;

由于我已为 AccountSummary 分配了值,因此我还需要为 Transaction 类分配值。但好像它是一个列表,我不知道如何分配。请帮忙。

【问题讨论】:

你可以使用 GSON 直接将 JSON 转换为 POJO ***.com/questions/31073624/… 为什么不直接使用这个工具呢? jsonschema2pojo.org 为什么要在代码中静态赋值,而不是用Jackson解析Json文件,让它赋值呢?如果你真的想这样做,你可以使用List.of() 方法将值静态分配给一个列表,但同样,它看起来很奇怪。 @MatteoNNZ 我无法说出原因,因为它是一个客户项目。我真的需要手动赋值。 @SamridhTuladhar 该网站对我不起作用。当我选择预览时,它显示一个空的弹出窗口 【参考方案1】:

你可以这样做, 首先,创建一个具有以下依赖项的 maven 项目,1.杰克逊核心2。杰克逊数据绑定3.杰克逊注解 确保所有三个依赖项都在同一个版本中。

然后为您的 POJO 对象创建单独的 model

public class AccountSummary
    @JsonProperty("Account_number") 
    public String account_number;
    @JsonProperty("Account_name") 
    public String account_name;


public class Transaction
    @JsonProperty("Date") 
    public String date;
    @JsonProperty("Amount") 
    public String amount;


public class Summary
    @JsonProperty("AccountSummary") 
    public AccountSummary accountSummary;
    @JsonProperty("Transaction") 
    public List<Transaction> transaction;


public class Root
    @JsonProperty("Summary")
    public Summary summary;

然后创建一个Main.java 类并实现以下代码。

public class Main 

    public static void main(String[] args) 
        try 
            ObjectMapper om = new ObjectMapper();
            Root root  = om.readValue(new File("your.value.json"),Root.class);
            System.out.println(root);
         catch (Exception e) 
            e.printStackTrace();
        
    

现在,当您执行时,您可以看到 json 文件中的所有值都已正确分配给您的模型。

所以像这样,您可以将您的 json 值映射到您的 objects

【讨论】:

很抱歉,我确实需要像在 AccountSummary 类中所做的那样手动分配值 其实我不认为我们可以分配这样的东西,但你可以创建默认值。【参考方案2】:

您可以尝试以下手动设置值

Summary.java

public class Summary 
    public AccountSummary accountSummary;
    public List<Transaction> transaction;

    public AccountSummary getAccountSummary() 
        return accountSummary;
    

    public void setAccountSummary(AccountSummary accountSummary) 
        this.accountSummary = accountSummary;
    

    public List<Transaction> getTransaction() 
        return transaction;
    

    public void setTransaction(List<Transaction> transaction) 
        this.transaction = transaction;
    


Transaction.java

public class Transaction 
    public String date;
    public String amount;

    public String getDate() 
        return date;
    

    public void setDate(String date) 
        this.date = date;
    

    public String getAmount() 
        return amount;
    

    public void setAmount(String amount) 
        this.amount = amount;
    


AccountSummary .java

public class AccountSummary 
    public String account_number;
    public String account_name;

    public String getAccount_number() 
        return account_number;
    

    public void setAccount_number(String account_number) 
        this.account_number = account_number;
    

    public String getAccount_name() 
        return account_name;
    

    public void setAccount_name(String account_name) 
        this.account_name = account_name;
    




final Code:-

    

AccountSummary a = new AccountSummary();
        a.setAccount_name("xyz");
        a.setAccount_number("xyz");

    List<Transaction> transactionList = new ArrayList<Transaction>();
    Transaction t = new Transaction();
    t.setAmount("xyz");
    t.setDate("xyx");
    transactionList.add(t);  // set the multiple object

// here is the final result

    Summary s = new Summary();
    s.setAccountSummary(a);
    s.setTransaction(transactionList);

【讨论】:

以上是关于使用 Java 将 JSON 转换为 POJO 并赋值的主要内容,如果未能解决你的问题,请参考以下文章

将 Java pojo 转换为 json 字符串

使用改造将不一致的 JSON 解析为 POJO

是否有将 Java POJO 转换为 JSON 和 XML 的库? [关闭]

使用 Java 将 xml 转换为 json

Java POJO的JSON对象数组

使用 JSend 格式通过 Retrofit 将 JSON 响应转换为 POJO?