vcpe/srcs/libs/docs/json_schema
huangxin 095d15f6a5 OCT 1. 增加协议接口参数字段验证框架 2023-02-27 10:34:43 +08:00
..
json OCT 1. 增加协议接口参数字段验证框架 2023-02-27 10:34:43 +08:00
schema OCT 1. 增加协议接口参数字段验证框架 2023-02-27 10:34:43 +08:00
README.md OCT 1. 增加协议接口参数字段验证框架 2023-02-27 10:34:43 +08:00

README.md

json-c d'accord library (libjsoncdac)

jsonc-daccord is a lightweight JSON Schema validation library written in C, and is taking advantage of the libjson-c library.

Design Goals

The goal is to have a lightweight JSON Schema validation implementation in C using json-c. json-c is popular in OpenWRT communities. Initially I just wanted it to support a small subset of JSON Schema to suit a need to validate simple json files. See the minimum build supports below. However to suit a broader audience, supporting more JSON Schema is important.

Currently the footprint of libjsoncdac.so is 8KB. The keep the footprint from bloating out, new features should be selectable using CMake options.

Minimal build supports:

  • all: type, enum, required, properties, const.
  • objects:
  • strings: minLength, maxLength.
  • integers and doubles: minimum, maximum.
  • arrays: minItems, maxItems, uniqeItems, items.

Example Use

Public headers:

See jsoncdaccord.h

    int jdac_validate_file(const char *jsonfile, const char *jsonschemafile);
    int jdac_validate(json_object *jobj, json_object *jschema);
    int jdac_ref_set_localpath(const char *_localpath);

    const char* jdac_errorstr(unsigned int jdac_errors);

Link your binary to: -ljsoncdac -ljson-c

Use the #include header: #include <jsoncdaccord.h>

Example C code:

#include <stdio.h>
#include <json-c/json.h>
#include <jsoncdaccord.h>

int main(int argc, char *argv[])
{
    char *json_file = "test.json";
    char *schema_file = "schema.json";

    // optional: load referenced schema files from filesystem
    char *localpath = "/my/path/to_json_files/";
    jdac_ref_set_localpath(localpath);

    printf("validating %s with %s\n", json_file, schema_file);
    int err = jdac_validate_file(json_file, schema_file);
    if (err==JDAC_ERR_VALID) {
        printf("validation ok\n");
    } else {
        printf("validate failed %d: %s\n", err, jdac_errorstr(err));
    }
    return err;
}

See jdac-cli.c as well.

Install

Building from source:

Install json-c and libcmocka-dev (used in the debug builds).

  • Release version:
git clone --branch libjsoncdac-0.2 https://github.com/domoslabs/jsonc-daccord &&\
cd jsonc-daccord && mkdir build && cd build &&\
cmake .. -DCMAKE_BUILD_TYPE=Release && make && sudo make install
  • Debug version:
git clone --branch libjsoncdac-0.2 https://github.com/domoslabs/jsonc-daccord &&\
cd jsonc-daccord && mkdir build && cd build &&\
cmake .. -DCMAKE_BUILD_TYPE=Debug && make && sudo make install

Note: After install you might need to run sudo ldconfig.

CMake Options

build options:

option description
CMAKE_BUILD_TYPE Build as Release or Debug. Default: Release.
RUN_TEST_SUITE Run JSON Schema test suite (CMAKE_BUILD_TYPE=Debug Only)
BUILD_PATTERN Support pattern.
BUILD_PATTERNPROPERTIES Support patternProperties
BUILD_ADDITIONALPROPERTIES Support additionalProperties
BUILD_PROPERTYNAMES Support propertyNames
BUILD_SUBSCHEMALOGIC Support allOf, anyOf, oneOf, not, if-then-else
BUILD_CONTAINS Support contains, minContains, and maxContains
BUILD_DOWNLOAD Support downloading referenced schema files
BUILD_STORE Support build a list of schema uri, id, and anchors
BUILD_REF Support $ref keyword. load schemas by file.

Note: All BUILD_* options are selected by default

Run tests

For debug builds:

ctest
ctest -V # to see output of tests

Running test suites are currently optional, and are select with RUN_TEST_SUITE=ON in the cmake options.

Command Line Interface

You can try the library with the jdac-cli command.

jdac-cli -h

To do

  • prevent infinite recursion