【发布时间】:2020-04-24 10:04:19
【问题描述】:
我有以下json形式的字符串:
{"num":1,"data":{"city":"delhi"}}
我需要使用sscanf 获取“num”键的值。这是我的尝试。我知道这是不正确的。但我不知道该怎么做。
#include <stdio.h>
#include <stdlib.h>
int main(void) {
char *str = "{\"num\":1,\"data\":{\"city\":\"delhi\"}}";
char *ret = malloc(sizeof(char) * 10);
sscanf(str, "{\"num\":%s, %s" , ret);
printf("%s", ret);
return 0;
}
有什么建议吗?
【问题讨论】:
-
不要使用 sscanf。 JSON 太复杂了。请改用适当的 JSON 解析器。
-
有两种可能性:如果您确定字符串完全采用这种方式
int num = atoi(strchr(str, ':')+1);格式化,则使用肮脏的hack;如果字符串可以变化,则使用json解析器。 -
@OliverMason,除了 sscanf 和正则表达式,我别无选择。我的整个实现都是用 C 语言实现的。我什至不能使用第三方插件、库等。
-
@Ctx,我认为您的方法可行,因为我的字符串具有固定格式。非常感谢。
-
为此使用 sscanf 是一个糟糕的主意。这是一个完全用 ANSI(便携式)C 编写的非常轻量级的 JSON 解析器。您可以将其放入您的项目中:github.com/udp/json-parser