我使用的是go rego包和rego。编组后的结果集给出以下结果:
[
{
"expressions": [
{
"value": {...},
"text": "data",
"location": { "row": 1, "col": 1 }
}
]
}
]
我打算在Input JSON中输出密钥导致失败的位置,以便在构建错误的上下文中使用它我们之前使用JSON模式来验证JSON,它用于从输入中返回密钥,我们可以在映射时出错。https://www.jsonschemavalidator.net/
我想,由于rego可以支持更复杂的决策,其中不止一个键将负责做出最终结果,这可能是它不会指向失败输入上下文中的位置的原因。除非我错过了什么?
回答第一个问题:
OPA解析的每个值都保留"位置"信息,用于标识它在源字符串/文件中的来源。ResultSet中的位置是创建rego.Rego
对象时传递的查询中表达式的位置。
在您的案例中,查询是"data"
,即您引用了OPA中的所有文档(既有可以从外部加载的基本文档,也有由您加载到OPA中任何规则生成的虚拟文档。(在这种情况下,表达式的位置不是很有趣:第1行,第1列。
回答您的第二个问题:
OPA目前没有可靠的方法来返回JSON值在输入中的位置,但这是有价值的,将来可能会添加。