json-c 带“/”字符的字符串

json-c string with "/" character

当我的程序像这样在 json 中保存内容时:

 json_object_object_add(jObj_my, "cats/dogs", json_object_new_double(cats/dogs));

.json 文件中的结果是:

"cats\/dogs" : some_double_number

如何避免打印 "\/" 而不是 "/"

json-c 库的代码在其 GitHub 存储库中有一个标志,使 / 的转义成为可选。

如果您不希望生成的字符串转义它,请使用 JSON_C_TO_STRING_NOSLASHESCAPE 标志,如下所示:

#include <stdio.h>
#include <json.h>

int main(int argc, char **argv)
{
    json_object *my_string;

    my_string = json_object_new_string("/foo/bar/baz");
    printf("my_string=%s\n", json_object_get_string(my_string));
    printf("my_string.to_string()=%s\n", json_object_to_json_string(my_string));
    printf("my_string.to_string(NOSLASHESCAPE)=%s\n", json_object_to_json_string_ext(my_string, JSON_C_TO_STRING_NOSLASHESCAPE));
    json_object_put(my_string);

    return 0;
}

示例改编自https://github.com/json-c/json-c/blob/master/tests/test1.c#L155

将其保存在 slashtest.c 中,对其进行编译,然后 运行 生成:

$ gcc -Wall slashtest.c -L/usr/local/lib -l:libjson-c.a -I/usr/local/include/json-c
$ ./a.out
my_string=/foo/bar/baz
my_string.to_string()="\/foo\/bar\/baz"
my_string.to_string(NOSLASHESCAPE)="/foo/bar/baz"

在 JSON 中转义 / 是合法的,并且可以说可能有用,请参阅 post 关于它:JSON: why are forward slashes escaped?

请注意,这个标志是在 2015 年添加到库的代码中的,但是不知何故,这种变化并没有出现在 6 月 7 日发布的最新 json-c-0.12.1 版本中, 2016.我不确定为什么。

所以要使用它,您必须从 GitHub 获取代码并编译它。