【问题标题】:Converting JSON to POJOs Using Java and assign values使用 Java 将 JSON 转换为 POJO 并赋值
【发布时间】: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 stackoverflow.com/questions/31073624/…
  • 为什么不直接使用这个工具呢? jsonschema2pojo.org
  • 为什么要在代码中静态赋值,而不是用Jackson解析Json文件,让它赋值呢?如果你真的想这样做,你可以使用List.of() 方法将值静态分配给一个列表,但同样,它看起来很奇怪。
  • @MatteoNNZ 我无法说出原因,因为它是一个客户项目。我真的需要手动赋值。
  • @SamridhTuladhar 该网站对我不起作用。当我选择预览时,它显示一个空的弹出窗口

标签: java json jsonschema2pojo


【解决方案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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-27
    • 2019-06-25
    • 2019-07-06
    • 1970-01-01
    • 1970-01-01
    • 2012-08-21
    • 1970-01-01
    相关资源
    最近更新 更多