Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在运行时解析JSON数组,并使用Gson和Java生成类/对象_Json_Parsing_Gson - Fatal编程技术网

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

在运行时解析JSON数组,并使用Gson和Java生成类/对象,json,parsing,gson,Json,Parsing,Gson,假设我有一个JSON字符串,格式如下: 我如何使用Gson分析它,以便我可以编写一个方法来根据值及其父项的单独出现执行操作 这里是一个示例JSON字符串,但是,考虑实际的JSON字符串要复杂得多,一个由深嵌套的子数组组成。 示例一: [{"Name":"First","Parent":"none","Elements":[{"One": 1, "Two": 2,"Parent":"none"}]}, {"Name":"Second","Parent":"First","

假设我有一个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"}]}]

对于这种JSON字符串,在转换到特定级别后,需要在对象中手动设置父级。JSON转换可以帮助您处理简单级别的层次结构,如HAS-A和IS-A,但自继承权的使用有点棘手。

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

也许不是所寻求的答案:

Gson目前没有在序列化或反序列化期间处理双向引用的内置机制(除了可以有选择地排除引用父对象的子对象中的序列化字段*,生成的JSON随后缺少子对象中的父对象引用数据,或者自定义序列化处理可以使用新的JSON元素替换父对象引用,并且对于反序列化,可以沿子对象实现自定义处理。)行M.J.描述)


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

也许不是所寻求的答案:

Gson目前没有在序列化或反序列化期间处理双向引用的内置机制(除了可以有选择地排除引用父对象的子对象中的序列化字段*,生成的JSON随后缺少子对象中的父对象引用数据,或者自定义序列化处理可以使用新的JSON元素替换父对象引用,并且对于反序列化,可以沿子对象实现自定义处理。)行M.J.描述)


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

您并没有说无法实现自层次结构。正确,这不是不可能的,但几乎是不可能的。在这种情况下,将对象序列化为JSON字符串时,还必须序列化完整的父对象,因为JSON字符串中的referecne不起作用。我们在Java或任何其他OOPS语言中使用对象referece,而不是JSON。在您的情况下,您必须用实际的JSON字符串替换FirstValue和SecondValue属性,请记住不要重复层次结构,否则会造成混乱。您没有ay self hierarchy无法实现。正确,这不是不可能的,但几乎是不可能的。在这种情况下,当您将对象序列化为JSON字符串时,还必须序列化完整的父对象,因为JSON字符串中的引用不起作用。我们使用Java或任何其他OOPS语言中的对象引用,而不是JSON。在您的情况下你必须用实际的JSON字符串替换FirstValue和SecondValue属性,记住不要重复层次结构,否则会造成混乱。@brud你编辑了这个问题以删除示例JSON,我发现产生的问题模棱两可,因为JSON没有定义对象的标准机制引用。你的问题是针对某个特定的JSON结构的吗?如果是,有什么例子吗?@Programmer Bruce:抱歉,我删除了它,以防误导。JSON可以是深度嵌套的,例如,内部元素的容器就是它们的父元素。因此,从子元素到父元素的引用由将子元素的“parent”元素值与子元素的父元素名称相匹配?对我来说,这样做更自然。{“id”:“father”,“child”:{“id”:“son”,“parent_id”:“father”}你对JSON结构和值没有控制权吗?别介意我之前的评论。它基于之前的JSON示例,其结构与上面当前发布的JSON示例不同。(你一直在移动目标。)是的,是的。考虑一个层次的标签视图结构,其中一个标签是另一个的孩子,等等,你创建一个制表族,用“tab表兄弟”,“标签表亲一旦被删除”,“标签子婿”等等。@布鲁德编辑了这个问题来删除示例JSON,并且我发现得到的问题是含糊不清的,因为JSON没有标准的ME。定义对象引用的机制。您的问题是否特定于特定的JSON结构?如果是,示例是什么?@Programmer Bruce:抱歉,我删除了它,以防误导。JSON可以是深度嵌套的,例如,内部元素的容器作为其父元素。因此,来自子元素的引用通过将子元素的“parent”元素值与子元素的父元素名称相匹配来标识父元素的名称?对我来说,这样更自然。{“id”:“father”,“child”:{“id”:“son”,“parent_id”:“father”}你对JSON结构和值没有控制权吗?别介意我之前的评论。它基于之前的JSON示例,其结构与上面当前发布的JSON示例不同。(你一直在移动目标。)是的,是的。考虑一个层次的标签视图结构,其中一个标签是另一个的孩子,等等,你创建一个制表族,用“tab表兄弟”,“标签表兄弟一旦被删除”,“标签子婿”等等。