【问题标题】:JSON Parser using cJSON解析器使用c
【发布时间】:2019-04-29 10:41:44
【问题描述】:

我必须使用 c 代码(不是 lib,因为想让事情看起来尽可能简单)解析 JSON 以进行一些实时处理。下面是需要解析的数据,我将从代码本身生成的一些计算中获得这些数据。请帮帮我。

[
{
    "Letter": 0 ,
    "Freq": 2858    
},
.
.
.
.
.
{
    "Letter" : 31,
    "Freq" : 0
}
]

【问题讨论】:

  • 你确定,实现 JSON 解析器会比使用现有库更简单吗?
  • JSON 格式是否总是相同的标签数量?
  • @KeineLust 是的,在这种特殊情况下,只有频率会发生变化。
  • @Gerhardh,不确定。

标签: c json parsing jsonparser


【解决方案1】:

这是我用过的两个 C 库。

  1. https://github.com/DaveGamble/cJSON:可以解析你的字符串,可以准备json字符串。

  2. https://github.com/zserge/jsmn : 仅用于解析 json 字符串。

这两个库都有很好的文档记录,并且有可用的测试代码。

【讨论】:

  • 他说他不想使用库
  • 哦,对不起,我错过了。那么在这种情况下使用strstr 可能有助于我们自己解析字符串
  • @shubham 你能详细说明一下吗?我正在计算代码中的数据并希望在 json 文件中更新它。
  • 你能澄清一下你是想更新 json 到一个文件还是仅仅解析它? cJSON_Test,这是用于解析和更新从/到文件读取/更新的 json 的测试代码。 Keine Lust 在下面的回答中解释了 strstr 和 strtok 的用法
【解决方案2】:

您似乎只想提取“Freq”值,在这种情况下,这段代码就足够了:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char *str = "[{\"Letter\": 0 ,\"Freq\": 2858},{\"Letter\" : 31,\"Freq\" : 0}]";

int main(void)
{
    char *ptr = str;
    long value;

    while (ptr) {
        ptr = strstr(ptr, "\"Freq\"");
        if (ptr == NULL) {
            break;
        }
        ptr = strchr(ptr, ':');
        if (ptr == NULL) {
            break;
        }
        ptr++;
        value = strtol(ptr, &ptr, 10);
        if (*ptr != '}') {
            break;
        }
        ptr++;
        printf("%lu\n", value);
    }
    return 0;
}

【讨论】:

    猜你喜欢
    • 2018-09-12
    • 2016-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多