schema에 대해 JSON의 유효성을 검사 할 수있는 안정적인 라이브러리가 있습니까?JSON 스키마 유효성 검사
json-schema.org은 list of implementations을 제공합니다. 특히 C 및 C++가 누락되었습니다.
C++ JSON 스키마 검사기를 쉽게 찾을 수없는 이유가 있습니까?
들어오는 JSON 파일의 유효성을 검사하는 빠른 방법이 필요합니까?
schema에 대해 JSON의 유효성을 검사 할 수있는 안정적인 라이브러리가 있습니까?JSON 스키마 유효성 검사
json-schema.org은 list of implementations을 제공합니다. 특히 C 및 C++가 누락되었습니다.
C++ JSON 스키마 검사기를 쉽게 찾을 수없는 이유가 있습니까?
들어오는 JSON 파일의 유효성을 검사하는 빠른 방법이 필요합니까?
나는 몇 구글에 안타 발견 http://aaronboodman-com-v1.blogspot.com/2010/11/c-version-of-json-schema.html스키마에 대해 JSON의 유효성을 검사 할 수있는 안정적인 라이브러리가 있습니까? 크롬 프로젝트에서
- :
당신은 또한 당신의 응용 프로그램에 파이썬이나 자바 스크립트 인터프리터를 연결 수를하고, 이미 찾은 유효성 검사기 구현의 기본 버전을 실행하기 만하면됩니다.
왜 C++ JSON 스키마 검사기를 쉽게 찾을 수 없나요?
JSON이 웹 기술로 시작된 것으로 알고 있으며 C/C++가 웹 응용 프로그램 구현에 유리하지 않았습니다.
+1 ... "부끄러워서 ..." –
Chromium 유효성 검사기가 실제로 보입니다. 좋지만 크롬을 사용하기 전에 기본 코드에서 스키마를 추출하고 싶습니다. 솔루션에서의 하락이 아니라 직접 작성하는 것보다 훨씬 낫습니다. –
[JSON Schema site] (http://json-schema.org/implementations.html)에는 C 라이브러리 (WJElement)가 나열되어 있지만 그와 관련된 경험이 없으며, 최신 버전의 표준을 지원합니다. – cloudfeet
UniversalContainer (libuc)를 사용해 볼 수 있습니다. http://www.greatpanic.com/code.html. 이 라이브러리의 컨테이너 계약/스키마 검사 클래스를 찾고 있습니다. 스키마 형식은 너무 복잡하지만 관심있는 모든 것을 처리하고 특정 인스턴스가 스키마를 충족하지 못하는 이유에 대한 합리적인보고를 제공해야합니다.
Valijson은 부스트에만 의존하는 매우 훌륭한 라이브러리입니다 (그리고 나는 실제로 change을 기대하고 있습니다). JsonCpp, rapidjson 및 json11과 같이 가장 일반적으로 사용되는 라이브러리에 대한 어댑터를 제공하는 특정 JSON 파서에 의존하지도 않습니다.
코드는 자세한 보일지도 모르지만, 당신은 항상 도우미 (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());
}
}
대부분의 경우 C 및 C++가 거의 웹 어플리케이션에 사용되지 않기 때문에, JSON의 주된 응용 프로그램입니다. 어떤 것이 없으면 다른 것을 가져 와서 이식 할 수 있습니다. –
JSON은 브라우저와 웹 서버 간의 대화 이상의 용도로 사용할 수 있습니다. 환경 설정, 시스템 간의 RPC 등을 저장하는 데 사용할 수 있습니다. 기본적으로, xml은 오늘날 어디에서나 (잘못) 사용됩니다. –
@Mark : 실제로 이것은 우리의 정확한 사용 사례입니다. 복잡한 구성을 저장하는 방법이 필요합니다 (ini에는 너무 복잡합니다). JSON을 xml로 선택했습니다. –