>

Jsonix를 사용하고 있습니다. 아래에서 언급 한 jsonix 매핑 및 jsonix 스키마를 생성하는 명령을 사용했습니다.

java -jar jsonix-schema-compiler-full.jar -generateJsonSchema -d mappings books.xsd

매핑과 스키마를 올바르게 생성하고 있습니다.AJV와 생성 된 JSON 스키마를 사용하여 JSON의 유효성을 검사하고 싶습니다.

var fs = require('fs');
var Ajv = require('ajv');
var XMLSchemaJsonSchema = JSON.parse(fs.readFileSync('../node_modules/jsonix/jsonschemas/w3c/2001/XMLSchema.jsonschema').toString());
var JsonixJsonSchema = JSON.parse(fs.readFileSync('../node_modules/jsonix/jsonschemas/jsonix/Jsonix.jsonschema').toString());
var booksJsonSchema = JSON.parse(fs.readFileSync('./books.jsonschema').toString());
var ajv = new Ajv();
ajv.addSchema(XMLSchemaJsonSchema, 'http://www.jsonix.org/jsonschemas/w3c/2001/XMLSchema.jsonschema');
ajv.addSchema(JsonixJsonSchema, 'http://www.jsonix.org/jsonschemas/jsonix/Jsonix.jsonschema');
var validate = ajv.compile(booksJsonSchema);
var data ={
   "book": [
      {
         "@id": "bk001",
         "author": "Writer",
         "title": "The First Book",
         "genre": "Fiction",
         "price": "44.95",
         "pub_date":2000-10-01,
         "review": "An amazing story of nothing."
      },
      {
         "@id": "bk002",
         "author": "Poet",
         "title": "The Poet's First Poem",
         "genre": "Poem",
         "price": "24.95",
         "pub_date":2000-10-02,
         "review": "Least poetic poems."
      }
   ]
};
var valid = validate(data);
if (!valid) {
    console.log('Validation failed errors:');
    console.log(validate.errors);
}else{
    console.log("successfully done validation");
}

그러나 오류가 발생합니다

/Users/qliktag/Desktop/QAGG/qagUI2/Scripts/QLIKTAG-2602/node_modules/ajv/lib/ajv.js:183
    else throw new Error(message);
               ^
Error: schema is invalid: data.definitions['nonPositiveInteger'].anyOf[0].exclusiveMaximum should be number
    at Ajv.validateSchema (/Users/qliktag/Desktop/QAGG/qagUI2/testScripts/node_modules/ajv/lib/ajv.js:185:16)
    at Ajv._addSchema (/Users/qliktag/Desktop/QAGG/qagUI2/Scripts/QLIKTAG-2602/node_modules/ajv/lib/ajv.js:316:10)
    at Ajv.addSchema (/Users/qliktag/Desktop/QAGG/qagUI2/Scripts/QLIKTAG-2602/node_modules/ajv/lib/ajv.js:136:29)
    at Object.<anonymous> (/Users/qliktag/Desktop/QAGG/qagUI2/Scripts/QLIKTAG-2602/mappings/ajvSample.js:248:5)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Function.Module.runMain (module.js:497:10)
    at startup (node.js:119:16)

실제로 ajv addschema 중에 오류가 발생했습니다. 문제가 있습니까?


  • 답변 # 1

    draft-04 스키마를 계속 사용하려면 meta: false 를 추가했습니다.  06 초안 메타 스키마 추가 방지https://github.com/epoberezkin/ajv/releases/tag/5.0.0

    var ajv = new Ajv({
        schemaId: 'id',
        meta: false, 
    });
    var metaSchema = require('../node_modules/ajv/lib/refs/json-schema-draft-04.json');
    ajv.addMetaSchema(metaSchema);
    ajv._opts.defaultMeta = metaSchema.id;
    ajv._refs['http://json-schema.org/schema'] = 'http://json-schema.org/draft-04/schema';
    
    

    이를 추가 한 후addSchema를 사용하여 독점 최대 값에 대한 부울을 허용하십시오

    ajv.addSchema(XMLSchemaJsonSchema, 'http://www.jsonix.org/jsonschemas/w3c/2001/XMLSchema.jsonschema');
    ajv.addSchema(JsonixJsonSchema, 'http://www.jsonix.org/jsonschemas/jsonix/Jsonix.jsonschema');
    
    

  • 답변 # 2

    와이즈 비즈의 변화  부울에서 숫자까지 JSON 스키마의 Draft-06/07에서 발생했습니다.

    exclusiveMaximum
    
    
    이것을 사용하고 // var ajv = new Ajv({schemaId: 'id'}); // If you want to use both draft-04 and draft-06/07 schemas: var ajv = new Ajv({schemaId: 'auto'}); ajv.addMetaSchema(require('ajv/lib/refs/json-schema-draft-04.json'));   addSchema 에 대한 부울 허용

    exclusiveMaximum
    
    

  • 답변 # 3

    여기서 Jsonix의 저자

    문서에서 지적했듯이 JSON 스키마 생성은 실험적인 기능입니다. 따라서 실패한다고 놀라지 않을 것입니다. 문제를 제기 할 수 있습니다.

    ajv.addSchema(XMLSchemaJsonSchema, 'http://www.jsonix.org/jsonschemas/w3c/2001/XMLSchema.jsonschema'); ajv.addSchema(JsonixJsonSchema, 'http://www.jsonix.org/jsonschemas/jsonix/Jsonix.jsonschema');

관련 자료

  • 이전 Visual Studio 코드로 angular5 프로젝트 빌드를 생성하는 방법
  • 다음 linux - CSV 파일에서 특정 숫자를 grep하는 방법