我需要在C中以JSON格式创建将由Node.js脚本操作的字符串。 C程序不需要使用或操作JSON对象。
问题是我的字符串可能包含双引号和其他可能破坏JSON字符串的字符。因此,我需要一种简单的方法来相应地将字符串转义为JSON标准,尽可能轻量级。
我会很感激解决这个问题。提前谢谢!
答案 0 :(得分:1)
一次循环输入字符串一个字符,并在必要时添加反斜杠:
void escape(char *in, char *out) {
while (*in) {
switch (*in) {
case '\\':
case '"':
*(out++) = '\\';
*(out++) = *in;
break;
case '\n':
*(out++) = '\\';
*(out++) = 'n';
break;
...
default:
*(out++) = *in;
break;
}
in++;
}
}
答案 1 :(得分:0)
如果您可以使用glib,g_strescape例程可能会起作用:' https://developer.gnome.org/glib/stable/glib-String-Utility-Functions.html#g-strescape'
逃离特殊字符' \ b',' \ f',' \ n',' \ r',&#39 ; \ t',' \ v',' \'和'''在字符串源中插入' \'在他们面前。此外,范围0x01-0x1F(SPACE下面的所有内容)和0x7F-0xFF(所有非ASCII字符)范围内的所有字符都替换为' \'然后是八进制表示。异常中提供的字符不会被转义。
答案 2 :(得分:0)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char * escape_string_for_json(char *str) {
// allocate the length of str
char *nstr = calloc(strlen(str) + 1, sizeof(char));
// loop through each character
long unsigned int c = 0;
long unsigned int d = 0;
while (c < strlen(str)) {
printf("character: %c\n", str[c]);
// json needs everything from '\x00' to '\x1f' escaped
if (str[c] == '"' || str[c] == '\\' || ('\x00' <= str[c] && str[c] <= '\x1f')) {
printf("\tescaping %c\n", str[c]);
// add the escape character to nstr
nstr[d] = '\\';
// increment d to account for the extra space
d++;
// allocate that space in the nstr pointer
nstr = realloc(nstr, d);
// add the character
nstr[d] = str[c];
} else {
// add the character to nstr
nstr[d] = str[c];
}
c++;
d++;
}
// add the \0 at the end
nstr[d] = '\0';
return nstr;
}
int main( int argc, char *argv[] ) {
printf("string to escape: \"%s\"\n", argv[1]);
char *str;
str = escape_string_for_json(argv[1]);
printf("escaped string: \"%s\"\n", str);
free(str);
}
gcc pgrm.c
./a.out "string to \" escape"