使用c语言的JSON解析器

使用c语言的JSON解析器,c,json,parsing,jsonparser,C,Json,Parsing,Jsonparser,我必须使用c代码解析JSON(而不是lib,因为我想让事情看起来尽可能简单),以便进行一些实时处理。下面是需要解析的数据,我将从代码本身生成的一些计算中得到这些数据。请帮帮我 [ { "Letter": 0 , "Freq": 2858 }, . . . . . { "Letter" : 31, "Freq" : 0 } ] 这是我使用过的两个C库 :这可以解析字符串并准备json字符串 :这仅用于解析json字符串 这两个库都有很好的文档记录,并且都有

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

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

这是我使用过的两个C库

  • :这可以解析字符串并准备json字符串

  • :这仅用于解析json字符串


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

    似乎您只想提取“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;
    }
    
    #包括
    #包括
    #包括
    char*str=“[{\'Letter\':0,\'Freq\':2858},{\'Letter\':31,\'Freq\':0}]”;
    内部主(空)
    {
    char*ptr=str;
    长期价值;
    while(ptr){
    ptr=strstr(ptr,“\”频率“);
    如果(ptr==NULL){
    打破
    }
    ptr=strchr(ptr,,:');
    如果(ptr==NULL){
    打破
    }
    ptr++;
    值=strtol(ptr和ptr,10);
    如果(*ptr!='}'){
    打破
    }
    ptr++;
    printf(“%lu\n”,值);
    }
    返回0;
    }
    
    你确定,实现JSON解析器比只使用现有库更简单吗?JSON是否总是以相同的格式使用相同的标签数?@KeineLust是的,在这种情况下只是频率变化。@Gerhardh,不确定。他说他不想使用库,抱歉我错过了。那么在本例中,使用可能有助于解析own@shubham你能详细说明一下吗?我正在计算代码中的数据,并希望在json文件中对其进行更新。您能否澄清是要将json更新为文件,还是仅对其进行解析,以下是用于解析和更新json读取/更新自/到文件的测试代码。Keine Lust在下面的回答中解释了strstr和strtok的用法