繁体   English   中英

JSON格式字符串上的strtok分隔符问题

[英]strtok delimiters issue on a JSON format string

使用以下定界符和子定界符,由于我已将“,”声明为字符串定界符的一部分,因此我找不到一种将发行者值作为整个字符串检索的方法。 请帮忙。

输入字符串是一个char *数组:(对不起,字符串是一个证书)

 {"first name":"Jhon","thumbprint":"*********","issuer":"CN=dccw, OU=cswde, O=xswe, 
 L=sdewc","validto":"Mon Jan 01 22:59:59 EST 
 2018","lastname":"Doe","userid":"DJhon","valid from":"Mon Aug 15 
 00:00:00 EDT 2011","subjectInfor":"************"}

 char* delim = "{}";
 char* subdelim = ":,";   

char *str1, *token, *name, *value;

int parse_count = 0;
for (str1 = stringToParse; parse_count<num ; str1 = NULL) {
    token = strtok(str1, delim);
    if (token == NULL)
        break;
    name = strtok(token, subdelim);
    value = strtok(NULL, subdelim);
    if (name == NULL || value == NULL) {
        continue;
    }
    strcpy (ptr->name, name);
    strcpy (ptr->value, value);
    ptr++;
    parse_count++;

   }
 return name_values;
}

输出:

 printf("%s=%s\n", params->name, params->value);

 first name=Jhon
 last name=Doe
 userid=DJhon

我认为使用JSON库更好,但是使用sscanf可以进行简单的解析。

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

int main(void){
    char data[]="{\"first name\":\"Jhon\",\"thumbprint\":\"*********\",\"issuer\":\"CN=dccw, OU=cswde, O=xswe, L=sdewc\",\"validto\":\"Mon Jan 01 22:59:59 EST 2018\",\"lastname\":\"Doe\",\"userid\":\"DJhon\",\"valid from\":\"Mon Aug 15 00:00:00 EDT 2011\",\"subjectInfor\":\"************\"}";
    char *contents = strtok(data, "{}");//remove '{' and  '}' : note that is not included in the content
    char key[128], value[128];
    int len;
    while(2==sscanf(contents, "\"%127[^\"]\":\"%127[^\"]\",%n", key, value, &len)){
        if(!strcmp(key, "first name") || !strcmp(key, "lastname") || !strcmp(key, "userid"))
            printf("%s=%s\n", key, value);
        contents += len;
    }
    return 0;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM