【问题标题】:Json / gson (de)serializing nested objectsJson / gson(反)序列化嵌套对象
【发布时间】:2012-07-24 20:46:23
【问题描述】:

关于如何使用 gson 或其他库(如果更适合)处理这种 json 结构的任何想法

[{
    "name": "john",
    "link": []
}, {
    "name": "mike",
    "link": [{
        "name": "kate",
        "link": []
    }, {
        "name": "john",
        "link": []
    }]
}, {
    "name": "jane",
    "link": [{
        "name": "tyler",
        "link": [{
            "name": "evan",
            "link": []
        }]
    }]
}]

对象列表(名称,链接),链接这些对象的同类列表
所以有不同的深度

【问题讨论】:

  • 什么都没有,因为我对 gson 了解不多,只是反序列化成一个对象列表,在那里没有帮助
  • 打算尝试在类 Foo{string name;数组列表 链接; ...带着希望
  • 这是个好主意,我认为它会奏效!

标签: json nested deserialization gson


【解决方案1】:

JSON 结构非常适合多维数组或多维列表。使用 Gson 反序列化它相对简单。

import java.io.FileReader;
import java.util.List;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.reflect.TypeToken;

public class GsonFoo
{
  public static void main(String[] args) throws Exception
  {
    Gson gson = new GsonBuilder().create();

    // Deserialized as a multidimensional array:
    BarsArray[] barsArray = gson.fromJson(new FileReader("input.json"), BarsArray[].class);
    System.out.println(gson.toJson(barsArray));

    // Deserialized as a multidimensional list of lists:
    List<BarsList> barsList = gson.fromJson(new FileReader("input.json"), new TypeToken<List<BarsList>>(){}.getType());
    System.out.println(gson.toJson(barsList));
  }
}

class BarsArray
{
  String name;
  BarsArray[] link;
}

class BarsList
{
  String name;
  List<BarsList> link;
}

【讨论】:

    【解决方案2】:

    嗯。明显的对象定义有什么问题:

    public class Node {
        public String name;
        public Node[] link; // or List<Node>
    }
    

    然后使用 GSON 或其他数据绑定库(如 Jackson)绑定 Node[]List&lt;Node&gt;

    【讨论】:

      【解决方案3】:

      您可以使用 GSON 原始集合 API 手动解析您的 json。这应该很简单,因为您的结构非常规则。示例见here

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-05
        • 2023-04-10
        • 1970-01-01
        • 1970-01-01
        • 2014-03-08
        • 1970-01-01
        相关资源
        最近更新 更多