7

Qt 对 XML的支持非常强大,包括对 XML 模式验证的支持。

Qt 对 JSON 的支持似乎不太广泛。我找不到任何东西似乎证实或否认支持json-schema或 Qt 中的任何其他类型的Json 模式验证

在 Qt/C++ 中验证 json 是否有可靠的方法?

编辑:要清楚,这个问题集中在Json 模式验证上,而不仅仅是确认任意文档是否是有效的 Json。

4

4 回答 4

5

Qt 5.8 似乎仍然没有 JSON Schema 验证......但你可以找到一堆其他有趣的库。

JSON Schema 网站上列出了 4 个 C/C++ 库:

  • @Boris提到的 wjelement 针对性能进行了优化,并由 Messaging Architects在电子邮件生产环境中使用。它是一个 C 库,但也提供了一个 C++ 包装器(wjelement-cpp)。
  • valijson是一个只有标头的模式验证器,可以与其他 JSON 解析器一起使用。
  • json-schema-validator基于nlohmann 的现代 c++ JSON 解析器,它具有很好的特性,可以与 STL 容器进行良好的交互。但是这个验证器似乎不太成熟。

其他 JSON Schema Validator 项目可以在 github 或 bitbucket 上找到,其中:

于 2017-03-16T04:55:31.420 回答
3

事实上,似乎没有 Qt 对 JSON Schema 验证的支持,即使在 Qt 5.1 中也是如此。由于编写自己的代码非常耗时,我建议:

  • 如果您作为开发人员已经提供了 Schema,则不要使用 JSON Schema 验证进行验证,而是对解析的 JSON 执行硬编码验证(即,手动检查所需字段是否存在,是否属于正确类型,并且在指定的范围内)

  • 如果需要处理外部 JSON Schema(即事先不知道 Schema,可能是用户定义的),那么不要使用 Qt,而是使用独立的 C/C++ JSON 验证器,例如WJElement(链接在 json-schema 网站上的那个) )

于 2013-09-04T22:51:28.877 回答
0

它存在http://qjson.sourceforge.net/,它也不包括模式验证。

qtplayground 中也存在Qtjsonstream,其中包括一些模式验证,但我没有使用它,所以我对它一无所知。

于 2013-09-05T09:34:18.460 回答
-2

I'll suggest you to yse qt-json it has simple vlidation like valid or not.

bool ok;
QtJson::JsonObject result = QtJson::parse(json, ok).toMap();
于 2013-09-05T08:46:13.513 回答