在运行时解析JSON数组并使用Gson和Java生成类/对象

时间:2011-06-07 09:46:26

标签: json parsing gson

考虑我有一个以下格式的JSON字符串:

我如何使用Gson 解析这个问题,以便我可以编写一个方法来根据值及其父项的个别实例执行操作?

这是一个示例JSON字符串,但是,请考虑实际的JSON字符串要复杂得多,其中包含深层嵌套的子数组。

样本一:

    [{"Name":"First","Parent":"none","Elements":[{"One": 1, "Two": 2,"Parent":"none"}]},       
  {"Name":"Second","Parent":"First","Elements":"none"},
{"Name":"Third","Parent":"Second","Elements":"none"},
{"Name":"Fourth","Parent":"Eighth","Elements":[{"One": 1, "Two": 2,"Parent":"Tenth"}]},
{"Name":"Fifth","Parent":"none","Elements":[{"One": 1, "Two": 2,"Parent":"First"}]},
{"Name":"Sixth","Parent":"Fourth","Elements":[{"One": 1, "Two": 2,"Parent":"First"}]}, 
{"Name":"Seventh","Parent":"Sixth","Elements":[{"One": 1, "Two": 2,"Parent":"Ninth"}]},
{"Name":"Eighth","Parent":"Seventh","Elements":[{"One": 1, "Two": 2,"Parent":"Tenth"}]},
{"Name":"Ninth","Parent":"Fourth","Elements":[{"One": 1, "Two": 2,"Parent":"Eighth"}]},
{"Name":"Tenth","Parent":"Third","Elements":[{"One": 1, "Two": 2,"Parent":"Second"}]},
{"Name":"Eleventh","Parent":"First","Elements":[{"One": 1, "Two": 2,"Parent":"First"}]}]

2 个答案:

答案 0 :(得分:1)

或许找不到答案:

Gson目前没有内置机制来处理双向引用,在序列化或反序列化期间(除了可以选择性地排除引用父项的子类中的序列化字段*,结果JSON然后缺少父引用数据)子项或自定义序列化处理可以用新的JSON元素替换父引用,并且为了反序列化,可以沿着MJ描述的行实现自定义处理。

Jackson does.

*从序列化中排除字段的机制是实际指定应包括所有其他字段。有关详细信息,请参阅the @Expose documentation

答案 1 :(得分:0)

对于这种JSON字符串,在转换到某个级别后,您需要在对象中手动设置父级。 JSON转换可以帮助您实现简单的层次结构,如HAS-A和IS-A,但自我层次结构使用起来有点棘手。