validar o json contra o esquema em javascript

Pergunta:

Existe uma forma simples ou nativa de JavaScript validar um script JSON contra um esquema JSON?

Encontrei muitas bibliotecas no Github, mas nenhuma solução nativa/simples. O EcmaScript não tem uma especificação para isto? e nenhum dos navegadores (ou nodejs) tem uma maneira de validar JSON nativamente?

contexto da questão:

Tenho um esquema muito complexo que desenvolvi. É suposto funcionar juntamente com um script que requer que os dados JSON passaram para ele para cumprir com o esquema.

Author: Nick Bull, 2016-08-13

2 answers

Simplesmente, não. Havia uma coisa chamada JSON Schema , que era um rascunho da Internet que expirou em 2013. Os rascunhos da Internet são a primeira fase para produzir uma norma da Internet . Veja mais sobre ele no site oficial {[[10]}, pois parece potencialmente ainda estar ativamente desenvolvido, embora não seja (ao meu conhecimento) em uso generalizado.

Um exemplo do esquema:

{
  "$schema": "http://json-schema.org/schema#",
  "title": "Product",
  "type": "object",
  "required": ["id", "name", "price"],
  "properties": {
    "id": {
      "type": "number",
      "description": "Product identifier"
    },
    "name": {
      "type": "string",
      "description": "Name of the product"
    },
    "price": {
      "type": "number",
      "minimum": 0
    },
    "tags": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "stock": {
      "type": "object",
      "properties": {
        "warehouse": {
          "type": "number"
        },
        "retail": {
          "type": "number"
        }
      }
    }
  }
}

Validará este exemplo JSON:

{
  "id": 1,
  "name": "Foo",
  "price": 123,
  "tags": [
    "Bar",
    "Eek"
  ],
  "stock": {
    "warehouse": 300,
    "retail": 20
  }
}

EDIT Como todos (mais ou menos) fazem a mesma coisa e têm sintaxes muito semelhantes, o desempenho deve ser da maior preocupação. Veja aqui para uma comparação do desempenho de JSON validator-o vencedor éajv , que é pessoalmente o que eu uso por esta razão.

 7
Author: Nick Bull, 2016-08-13 20:11:07
Parece haver pelo menos uma solução JS pura. https://github.com/tdegrunt/jsonschema disponível via npm ( https://www.npmjs.com/package/jsonschema não sou um colaborador, embora aprecie o seu trabalho.
 2
Author: Joe Steele, 2021-01-05 17:22:16