java - 如何将包含自定义对象列表的地图字段的自定义对象转换为 json?
问题描述
假设,我有一个 Employee 类,如下所示:
public class Employee{
Map<String, ArrayList<Salary>> salary = new HashMap<String, ArrayList<Salary>>();
String name;
String age;
}
public class Salary{
String amount;
String currency;
}
在 Java 中与 Json 进行转换的最聪明的方法是什么?
或者;
如果我的 json 看起来像这样怎么办:
{
"name": "Test",
"age": "12",
"salary": {
"first": {
"41130": {
"amount": "100",
"currency": "€"
},
"41132": {
"amount": "100",
"currency": "€"
}
},
"second": {
"41129": {
"amount": "100",
"currency": "€"
}
}
}
}
当我尝试将其转换为 Employee 时,出现以下错误。
com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:应为 BEGIN_ARRAY 但为 BEGIN_OBJECT
解决方案
public class Main {
public static void main(String[] args) {
Gson gson = new Gson();
Map<String, ArrayList<Salary>> sal = new HashMap<String, ArrayList<Salary>>();
ArrayList<Salary> salaries = new ArrayList<Salary>();
Salary salary1 = new Salary("100", "€");
Salary salary2 = new Salary("200", "€");
salaries.add(salary1);
salaries.add(salary2);
sal.put("1", salaries);
Employee employee = new Employee(sal, "Test", "12");
System.out.println("Age -> " + employee.getAge());
System.out.println("Name -> " + employee.getName());
System.out.println("Salary -> " + employee.getSalary());
String json = gson.toJson(employee);
System.out.println("Json -> " + json);
Employee employee1 = gson.fromJson(json, Employee.class);
System.out.println("Age1 -> " + employee1.getAge());
System.out.println("Name1 -> " + employee1.getName());
System.out.println("Salary1 -> " + employee1.getSalary());
}
@Data
@AllArgsConstructor
@NoArgsConstructor
public static class Employee{
Map<String, ArrayList<Salary>> salary = new HashMap<String, ArrayList<Salary>>();
String name;
String age;
}
@Data
@AllArgsConstructor
@NoArgsConstructor
public static class Salary{
String amount;
String currency;
}
}
推荐阅读
- ios - 在 SWIFT 中将 UTC 时间转换为 PST
- sockets - Laravel ReactPHP Socket 服务器需要在启动当天重启
- node.js - 在上传之前处理来自 express-validator 的验证结果
- c++ - 将 std::vector 移动到 std::array
- node.js - 用数组的值更新对象
- ruby-on-rails - Rails 6.0.4 config.ru undefined_method load_server
- php - 以 PHP 形式上传图像位置
- c# - 为什么我不能使用 C# winforms 在新窗口中打开网页?
- mysql - 为什么 Mysql Rand() 在使用左连接时有不同的行为
- typescript - 使用打字稿在本机反应中从状态更新样式