据我所知,jv_parse
可以用来验证JSON的字符串.
它在src/jv.h年宣布为:
jv jv_parse(const char* string);
将此函数的结果传递给jv_is_valid
似乎可以完成工作.src/jv.h中将jv_is_valid
定义为:
static int jv_is_valid(jv x) {
return jv_get_kind(x) != JV_KIND_INVALID;
}
下面是一个粗略的例子:
#include <jq.h>
#include <stdio.h>
#include <string.h>
int json_is_valid(const char *json)
{
jv ele = jv_parse(json);
int valid = jv_is_valid(ele);
jv_free(ele);
return valid;
}
int main(void)
{
while (1) {
char buf[512];
if (!fgets(buf, sizeof buf, stdin))
break;
buf[strcspn(buf, "\n")] = '\0';
printf("<<%s>> Valid? %s.\n", buf, json_is_valid(buf) ? "Yes" : "No");
}
}
{}
<<{}>> Valid? Yes.
[]
<<[]>> Valid? Yes.
[{}]
<<[{}]>> Valid? Yes.
[][]
<<[][]>> Valid? No.
"foo"
<<"foo">> Valid? Yes.
"foo":"bar"
<<"foo":"bar">> Valid? No.
51
<<51>> Valid? Yes.
{42: []}
<<{42: []}>> Valid? No.
{"42":[1, 2, 3]}
<<{"42":[1, 2, 3]}>> Valid? Yes.
'qux'
<<'qux'>> Valid? No.
jq_compile
(jq_compile_args
)的问题在于,它似乎解析了the manual中描述的jq过滤语言.
也许有一种更正确的方法,但lack of a proper C API documentation使这一问题成为一个难以研究的问题.