【发布时间】:2020-02-26 21:41:44
【问题描述】:
"context A": {
"name": "parent A",
"operation": {
"name": "op A",
"convenienceType": {
"descriptor": "View",
"id": "view_id"
}
},
"context B": {
"name": "child B",
"operation": {
"name": "op B",
"convenienceType": {
"descriptor": "View",
"id": "view_id"
}
}
}
}
我有一个 operation 对象,它在我的 JSON 中重复,但用于不同的上下文。操作的convenienceType 字段基本上来自枚举选择,因此无论operation 对象是从哪个上下文生成的,带有"View" 描述符的convenienceType 都是同一个对象。
我在我的 Groovy 脚本中使用 JSONSlurper 来解析它。这是我所看到的:
在上下文 A 级别:
operation.convenienceType.descriptor // evaluates to "View" (string)
在上下文 B 级别:
operation.convenienceType.descriptor // evaluates to ["View"] (array)
所以当我尝试做类似的事情时
operation.convenienceType.descriptor.toLowerCase
它适用于上下文 A,但在上下文 B 中出现错误,因为我的代码抱怨没有数组的 toLowerCase 方法。
任何人都知道为什么会发生这种情况...?
【问题讨论】:
-
请添加代码以及显示该问题的确切 JSON。您提供的那个似乎嵌套得很奇怪,如果您尝试一下,您会发现它有效并且没有随机行为。很可能您的 json 中有 数组,并且您使用的代码将退回到隐式传播运算符调用。
-
我必须相信你的钥匙链中的一个值是一个列表(使用 []),而不是一个对象(使用 {})。即使列表中只有一个对象,它也会将评估中的类型转换为列表。
标签: groovy jsonslurper