0
"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字段基本上来自枚举选择,因此带有"View"描述符的便利类型是同一个对象,无论operation对象是从哪个上下文生成的。

我在我的 Groovy 脚本中使用 JSONSlurper 来解析它。这是我所看到的:

在上下文 A 级别:

operation.convenienceType.descriptor // evaluates to "View" (string)

在上下文 B 级别:

operation.convenienceType.descriptor // evaluates to ["View"] (array)

所以当我尝试做类似的事情时

operation.convenienceType.descriptor.toLowerCase

它适用于上下文 A,但在上下文 BI 中出现错误,因为我的代码抱怨没有toLowerCase数组方法。

任何人都知道为什么会发生这种情况...?

4

1 回答 1

0

您给出的示例不会以您指定的方式失败:

def j = '''{
"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"
            }
        }
    }   
}
}'''

import groovy.json.*

def p = new JsonSlurper().parseText(j)

assert p.'context A'.operation.convenienceType.descriptor == 'View'
assert p.'context A'.'context B'.operation.convenienceType.descriptor == 'View'
于 2020-02-27T09:18:11.687 回答