JSON 스키마 검증
스키마에 대해 JSON을 검증할 수 있는 안정된 라이브러리가 있습니까?
json-schema.org 에서는 구현 목록을 제공합니다.특히 C와 C++가 없습니다.
C++ JSON c c c c c c c c c c c c c c c c c c c?
다른 사람은 들어오는 JSON 파일을 빠르게 검증할 수 있는 방법을 원하지 않습니까?
스키마에 대해 JSON을 검증할 수 있는 안정된 라이브러리가 있습니까?
구글에서 몇 가지 검색어를 찾았습니다.
- Chromium 프로젝트: http://aaronboodman-com-v1.blogspot.com/2010/11/c-version-of-json-schema.html
- http://avro.apache.org/docs/1.4.1/api/cpp/html/index.html
또한 Python 또는 Javascript 인터프리터를 앱에 연결하여 이미 찾은 검증기 구현의 네이티브 버전을 실행할 수도 있습니다.
C++ JSON 스키마 검증기를 쉽게 찾을 수 없는 이유가 있나요?
JSON은 웹 기술에서 출발하여 C/C++는 웹 앱 구현에서 인기가 떨어졌다고 생각합니다.
Valijson은 Boost에만 의존하는 매우 좋은 라이브러리입니다(그리고 저는 실제로 그것을 바꾸고 싶습니다).특정 JSON 파서에 의존하지 않고 JsonCpp, rapidjson 및 json11과 같이 가장 일반적으로 사용되는 라이브러리를 위한 어댑터를 제공합니다.
코드는 상세하게 보일 수 있지만 언제든지 도우미를 쓸 수 있습니다(JsonCpp의 예).
#include <json-cpp/json.h>
#include <sstream>
#include <valijson/adapters/jsoncpp_adapter.hpp>
#include <valijson/schema.hpp>
#include <valijson/schema_parser.hpp>
#include <valijson/validation_results.hpp>
#include <valijson/validator.hpp>
void validate_json(Json::Value const& root, std::string const& schema_str)
{
using valijson::Schema;
using valijson::SchemaParser;
using valijson::Validator;
using valijson::ValidationResults;
using valijson::adapters::JsonCppAdapter;
Json::Value schema_js;
{
Json::Reader reader;
std::stringstream schema_stream(schema_str);
if (!reader.parse(schema_stream, schema_js, false))
throw std::runtime_error("Unable to parse the embedded schema: "
+ reader.getFormatedErrorMessages());
}
JsonCppAdapter doc(root);
JsonCppAdapter schema_doc(schema_js);
SchemaParser parser(SchemaParser::kDraft4);
Schema schema;
parser.populateSchema(schema_doc, schema);
Validator validator(schema);
validator.setStrict(false);
ValidationResults results;
if (!validator.validate(doc, &results))
{
std::stringstream err_oss;
err_oss << "Validation failed." << std::endl;
ValidationResults::Error error;
int error_num = 1;
while (results.popError(error))
{
std::string context;
std::vector<std::string>::iterator itr = error.context.begin();
for (; itr != error.context.end(); itr++)
context += *itr;
err_oss << "Error #" << error_num << std::endl
<< " context: " << context << std::endl
<< " desc: " << error.description << std::endl;
++error_num;
}
throw std::runtime_error(err_oss.str());
}
}
Universal Container(libuc)를 사용해 볼 수 있습니다.http://www.greatpanic.com/code.html 를 참조해 주세요.이 라이브러리에서 컨테이너 계약/스케마 검사 클래스를 찾고 있습니다.스키마 형식은 투박하지만 관심 있는 모든 것을 처리하고 특정 인스턴스가 스키마를 충족하지 못하는 이유에 대한 합리적인 보고서를 제공해야 합니다.
폴리글롯의 어프로치에 대응할 수 있는 경우, Ajv는 견고한 JavaScript 실장이라고 생각됩니다.
주의: ajv-cli도 있습니다.
https://github.com/jessedc/ajv-cli
스키마에 대해 JSON을 검증할 수 있는 안정된 라이브러리가 있습니까?
스키마에 대한 JSON 검증에 사용하고 있습니다(대부분).테스트 및 안정성이 높은 것 같습니다(github repo에 따르면 v1.1.0은 최신 릴리스인 것 같습니다).
Windows 플랫폼에서는, 선택한 언어에 관계없이, JSON Essentials for COM/ActiveX 를 사용할 수 있습니다.MSVC 컴파일러를 사용하여 C++에서 사용하는 경우 컴파일러 생성 래퍼를 사용하여#import
사전 지시문입니다.
이 문서에는 C#, VB 및 JavaScript에서 가장 일반적인 사용 사례에 대한 샘플이 포함되어 있습니다.변경되는 것은 언어 구문뿐입니다.COM을 지원하는 거의 모든 언어로 동일한 라이브러리 호출을 사용하여 구현할 수 있습니다.
또, 무료 라이센스 옵션도 제공하고 있습니다.
다음으로 JSON Essentials 평가 버전을 사용하여 새로 작성된 WSH(Windows Script Host)용 스키마를 사용하여 스키마를 작성하고 JSON 문서를 로드 및 검증하는 예를 나타냅니다.
// Create a new JsonEssentials class instance.
var jess = new ActiveXObject('JsonEssentials_0.JsonEssentials.1');
jess.unlock('jesscomeval');
// Create schema JSON document object.
var schemaDoc = jess.createDocument();
// Load JSON schema.
schemaDoc.load({
'type': 'array',
'items': {
'type': 'integer'
}
});
// Create schema collection object.
var schemas = jess.createSchemas();
// Add the test schema to the collection.
var schema = schemas.add(schemaDoc, 'uri:test');
// Create JSON document object.
var instanceDoc = jess.createDocument();
// Load JSON, an array of numeric values.
instanceDoc.load([ 0, 1, 2 ]);
// Validate the test JSON against the added schema.
var status = schema.validate(instanceDoc);
WScript.Echo(status.success ? 'validated' : 'validation failed');
이 접근방식은 https://epub.jku.at/obvulioa/content/pageview/6390647?query=berardinelli 에서 보실 수 있습니다.
JSON 문서(메타셰마, 스키마 또는 스키마 인스턴스)의 메모리 내 표현은 EMF(Eclipse Modeling Framework)에서 제공됩니다.메모리 내 표현(통상적인 JSON 텍스트 표기법을 유지하고 현재 사용 중인 JSON 도구와 호환됨)이 있으면 OCL과 같은 EMF 기반 기술 및 Eclipse Epsilon과 같은 MDE 플랫폼을 사용할 수 있습니다.
언급URL : https://stackoverflow.com/questions/4676171/json-schema-validation
'programing' 카테고리의 다른 글
ASP.NET MVC에서 "보기 검색"을 위한 사용자 지정 위치를 지정할 수 있습니까? (0) | 2023.05.29 |
---|---|
콘솔의 차이점은 무엇입니까?WriteLine() 대 Debug.줄 쓰기()? (0) | 2023.05.29 |
jq: 중첩된 개체, 최상위 ID를 추출하고 내부 개체에서 값을 들어 올립니다. (0) | 2023.03.06 |
HH 변환:MM: SS에서 초까지의 monentjs (0) | 2023.03.06 |
React Redux 앱의 서버에서 초기 데이터를 가져오려면 어디로 가야 합니까? (0) | 2023.03.06 |