我有一个可以简化如下的对象:
{
"myObject": {
"values": [
"a string value",
123456, // a number value
true, // a boolean value
{ // an object with an array of values
"values": [
// same as before...
// it allows string/number/boolean/object
]
}
]
}
}
因此,我尝试为此对象编写一个FieldDescriptor
,但我不知道(而且我也找不到)如何记录这一事实,即它可能包含许多“无限”类似其自身结构的对象
我也可以不要记录数组部分的内部内容,但是如果我尝试这样做,则会出现此错误:
未记录有效载荷的以下部分:
{
"myObject":[
{
"values":[
{
"values":[ "pasta" ]
},
{
"values":[ "pizza" ]
},
{
"values":[ "mandolino" ]
}
]
}
]
}
public static List<FieldDescriptor> myObjectDescriptor = List.of(
fieldWithPath("values").type(JsonFieldType.ARRAY).description("May be an array of 'STRING', 'BOOLEAN', 'NUMBER', or 'myObjectDescriptor'").optional(),
fieldWithPath("values[].*").type(JsonFieldType.VARIES).description("you know...").optional(),
);
正如我之前所说,我也尝试擦除第二个fieldWithPath
,但是错误仍然存在。
myObject:
type: object
properties:
values:
items:
type: object
# I am not using 'oneOf' here because
# of reasons not related with the question
# oneOf:
# - type: integer
# - type: string
# - type: boolean
# - $ref: '#/myObject'
type: array
description: an array of 'STRING', 'BOOLEAN', 'NUMBER', or 'myObject'
编辑:YAML是正确的,我不能在同一值数组中包含整数和字符串,为简单起见,我在上面做了此操作。
答案 0 :(得分:0)
找到了一个令人厌恶的解决方案,该解决方案不适用于“无限”多个对象,但至少适用于n层...
public static List<FieldDescriptor> myObjectDescriptor = List.of(
fieldWithPath("values").type(JsonFieldType.ARRAY).description("May be an array of 'STRING', 'BOOLEAN', 'NUMBER', or 'myObjectDescriptor'").optional(),
fieldWithPath("values[].*").type(JsonFieldType.VARIES).description("you know...").optional(),
fieldWithPath("values[].values").type(JsonFieldType.ARRAY).description("don't look at me").optional(),
fieldWithPath("values[].values[].*").type(JsonFieldType.VARIES).description("this is terrible").optional(),
// ... and so on ...
);
我愿意寻求更好的解决方案... 否则,我希望这个耻辱可以帮助某人