Gson并反序列化带有数组的对象数组

Gson并反序列化带有数组的对象数组,第1张

Gson并反序列化带有数组对象数组

原始问题中的示例Java数据结构与注释中JSON结构的描述不匹配。

JSON被描述为

“由{object组成的数组,具有{object}组成的数组}”。

就问题中描述的类型而言,将JSON转换为与JSON结构匹配的Java数据结构,以便通过Gson轻松反序列化。

“ {TypeDTO对象的数组与{ItemDTO对象}的数组}”。

但是问题中提供的Java数据结构不是这个。而是

“ {TypeDTO对象的数组与{ItemDTO对象}的数组的数组}}”。

二维数组!=一维数组。

第一个示例演示了如何使用Gson简单地反序列化和序列化JSON结构,该结构是“ {object的数组和{object}的数组}”。

input.json内容:

[  {    "id":1,    "name":"name1",    "items":    [      {"id":2,"name":"name2","valid":true},      {"id":3,"name":"name3","valid":false},      {"id":4,"name":"name4","valid":true}    ]  },  {    "id":5,    "name":"name5",    "items":    [      {"id":6,"name":"name6","valid":true},      {"id":7,"name":"name7","valid":false}    ]  },  {    "id":8,    "name":"name8",    "items":    [      {"id":9,"name":"name9","valid":true},      {"id":10,"name":"name10","valid":false},      {"id":11,"name":"name11","valid":false},      {"id":12,"name":"name12","valid":true}    ]  }]

Foo.java:

import java.io.FileReader;import java.util.ArrayList;import com.google.gson.Gson;public class Foo{  public static void main(String[] args) throws Exception  {    Gson gson = new Gson();    TypeDTO[] myTypes = gson.fromJson(new FileReader("input.json"), TypeDTO[].class);    System.out.println(gson.toJson(myTypes));  }}class TypeDTO{  int id;  String name;  ArrayList<ItemDTO> items;}class ItemDTO{  int id;  String name;  Boolean valid;}

第二个示例使用了一个JSON结构来匹配最初提供的Java数据结构,该JSON结构实际上是“
{TypeDTO对象的数组与{ItemDTO对象}的数组的数组”)。

input.json内容:

[  {    "id":1,    "name":"name1",    "items":    [      [        {"id":2,"name":"name2","valid":true},        {"id":3,"name":"name3","valid":false}      ],      [        {"id":4,"name":"name4","valid":true}      ]    ]  },  {    "id":5,    "name":"name5",    "items":    [      [        {"id":6,"name":"name6","valid":true}      ],      [        {"id":7,"name":"name7","valid":false}      ]    ]  },  {    "id":8,    "name":"name8",    "items":    [      [        {"id":9,"name":"name9","valid":true},        {"id":10,"name":"name10","valid":false}      ],      [        {"id":11,"name":"name11","valid":false},        {"id":12,"name":"name12","valid":true}      ]    ]  }]

Foo.java:

import java.io.FileReader;import java.util.ArrayList;import com.google.gson.Gson;public class Foo{  public static void main(String[] args) throws Exception  {    Gson gson = new Gson();    TypeDTO[] myTypes = gson.fromJson(new FileReader("input.json"), TypeDTO[].class);    System.out.println(gson.toJson(myTypes));  }}class TypeDTO{  int id;  String name;  ArrayList<ItemDTO> items[];}class ItemDTO{  int id;  String name;  Boolean valid;}

关于其余两个问题:

Gson非常快吗?

不能与其他反序列化/序列化API进行比较。传统上,格森(Gson)是最慢的。据报道,Gson的当前版本和下一版本都对性能进行了重大改进,尽管我没有寻找支持这些说法的最新性能测试数据。

就是说,如果Gson足够快地满足您的需求,那么由于JSON反序列化非常容易,因此使用它可能很有意义。如果需要更好的性能,那么Jackson可能是更好的选择。它提供了Gson的很多(甚至是全部)便利。

还是我最好坚持自己已经做的工作​​?

我不会 我最希望的只是一行简单的代码,例如

TypeDTO[] myTypes = gson.fromJson(new FileReader("input.json"), TypeDTO[].class);

…以便轻松地将其反序列化为复杂的数据结构,而不是一次需要将各段映射到一个组件的三十行代码。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5031024.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-15
下一篇 2022-11-15

发表评论

登录后才能评论

评论列表(0条)

保存