如何验证嵌套 json 中的子值

How to validate child value in nested json

这是 json 响应正文:

{
  "studentName": "good student",
  "age": "18",
  "address": "street 123",
  "courses": {
    "math": {
      "description": "how to calculate",
      "enrollment": "enrolled",
      "status": {
        "result": "OK"
      }
    },
    "english": {
      "description": "abc",
      "enrollment": "not-enrolled",
      "status": {
        "result": "OK"
      }
    }
  }
}

我想验证 "enrollment" 值,例如,我想获得以下格式的输出:

math : enrolled
english : not-enrolled

想知道如何使用 jq 命令执行此操作,在此先感谢。

不确定 "validate." 是什么意思但是要简单地获取 "course" 和它的当前 "enrollment" 状态,您可以这样做:

.courses | to_entries[] | "\(.key) : \(.value.enrollment)"

如果 "validate" 意味着检查值是否都符合预期,那么您可以按照以下行使用过滤器:

.courses
| with_entries( select( .value.enrollment as $e
                | ["enrolled", "not-enrolled"] | index($e) | not) )

即 select "enrollment" 不在可接受值列表中的课程。 (这里,"X | not" 具有否定 X 的效果。)

运行 针对您的数据添加了 "enrollment" 无效的课程会产生该课程:

{
  "french": {
    "description": "abc",
    "enrollment": "non",
    "status": {
      "result": "OK"
    }
  }
}