用 CJSON 解析的 JSON 中的第一个数字始终为 0
First number in JSON parsed with CJSON is always 0
我正在尝试使用 cJSON 解析由网络服务器上的 CGI 文件接收的 JSON 文件,但是 JSON 中的第一个数字不断更改为 0。
我编写了一小段代码用于测试:
int main(int argc, char *argv[])
{
cJSON *pstReq;
char *pcReq = getenv("QUERY_STRING");
printf("Content-Type: application/json\n\n");
URLDecode(pcReq) /* Decodes the query string to JSON string */
pstReq = cJSON_Parse(pstReq);
printf("%d\n", cJSON_GetObjectItem(pstReq, "test")->valueint);
printf("%d\n", cJSON_GetObjectItem(pstReq, "test2")->valueint);
printf(cJSON_Print(pstReq));
return EXIT_SUCCESS;
}
通过查询字符串将 JSON {"test":123, "test2":123} 传递给它会导致程序输出:
0
123
{"test":0, "test2":123}
我完全不知道我做错了什么,如果有人能告诉我问题出在哪里,我将不胜感激。
如果不知道URLDecode是如何工作的,或者从环境中获取pcReq的原始内容是什么,就很难知道。我将从 运行 在没有网络的情况下使用此代码开始,将 cJSON 作为一个小单元进行测试,这可能会阐明问题所在。
首先,为了帮助我们理解您的代码,在下面的代码中:
pstReq = cJSON_Parse(pstReq);
我认为你的意思是:
pstReq = cJSON_Parse(pcReq);
考虑到这一点,我会先 运行 此代码:
#include <stdio.h>
#include <stdlib.h>
#include "cJSON.h"
int main(int argc, char *argv[])
{
cJSON *pstReq;
char *pcReq = "{\"test\":123, \"test2\":123}";
pstReq = cJSON_Parse(pcReq);
printf("%d\n", cJSON_GetObjectItem(pstReq, "test")->valueint);
printf("%d\n", cJSON_GetObjectItem(pstReq, "test2")->valueint);
printf("%s\n",cJSON_Print(pstReq));
return EXIT_SUCCESS;
}
这符合我的预期。
如果这也为您生成了正确的输出,我将添加 printf() 以查看 URLDecode() 前后 pcReq 中包含的内容。问题可能来自 'pcReq' 本身。所以简而言之,这段代码可能会让您了解问题出在哪里:
int main(int argc, char *argv[])
{
cJSON *pstReq;
char *pcReq = getenv("QUERY_STRING");
printf("Content-Type: application/json\n\n");
printf ("=== pcReq before decoding ===\n");
printf("%s\n",pcReq);
printf ("=============================\n");
URLDecode(pcReq); /* Decodes the query string to JSON string */
printf ("=== pcReq after decoding ===\n");
printf("%s\n",pcReq);
printf ("=============================\n");
pstReq = cJSON_Parse(pcReq);
printf("%d\n", cJSON_GetObjectItem(pstReq, "test")->valueint);
printf("%d\n", cJSON_GetObjectItem(pstReq, "test2")->valueint);
printf("%s\n",cJSON_Print(pstReq));
return EXIT_SUCCESS;
}
我希望这有助于找到问题。
我正在尝试使用 cJSON 解析由网络服务器上的 CGI 文件接收的 JSON 文件,但是 JSON 中的第一个数字不断更改为 0。
我编写了一小段代码用于测试:
int main(int argc, char *argv[])
{
cJSON *pstReq;
char *pcReq = getenv("QUERY_STRING");
printf("Content-Type: application/json\n\n");
URLDecode(pcReq) /* Decodes the query string to JSON string */
pstReq = cJSON_Parse(pstReq);
printf("%d\n", cJSON_GetObjectItem(pstReq, "test")->valueint);
printf("%d\n", cJSON_GetObjectItem(pstReq, "test2")->valueint);
printf(cJSON_Print(pstReq));
return EXIT_SUCCESS;
}
通过查询字符串将 JSON {"test":123, "test2":123} 传递给它会导致程序输出:
0
123
{"test":0, "test2":123}
我完全不知道我做错了什么,如果有人能告诉我问题出在哪里,我将不胜感激。
如果不知道URLDecode是如何工作的,或者从环境中获取pcReq的原始内容是什么,就很难知道。我将从 运行 在没有网络的情况下使用此代码开始,将 cJSON 作为一个小单元进行测试,这可能会阐明问题所在。
首先,为了帮助我们理解您的代码,在下面的代码中:
pstReq = cJSON_Parse(pstReq);
我认为你的意思是:
pstReq = cJSON_Parse(pcReq);
考虑到这一点,我会先 运行 此代码:
#include <stdio.h>
#include <stdlib.h>
#include "cJSON.h"
int main(int argc, char *argv[])
{
cJSON *pstReq;
char *pcReq = "{\"test\":123, \"test2\":123}";
pstReq = cJSON_Parse(pcReq);
printf("%d\n", cJSON_GetObjectItem(pstReq, "test")->valueint);
printf("%d\n", cJSON_GetObjectItem(pstReq, "test2")->valueint);
printf("%s\n",cJSON_Print(pstReq));
return EXIT_SUCCESS;
}
这符合我的预期。
如果这也为您生成了正确的输出,我将添加 printf() 以查看 URLDecode() 前后 pcReq 中包含的内容。问题可能来自 'pcReq' 本身。所以简而言之,这段代码可能会让您了解问题出在哪里:
int main(int argc, char *argv[])
{
cJSON *pstReq;
char *pcReq = getenv("QUERY_STRING");
printf("Content-Type: application/json\n\n");
printf ("=== pcReq before decoding ===\n");
printf("%s\n",pcReq);
printf ("=============================\n");
URLDecode(pcReq); /* Decodes the query string to JSON string */
printf ("=== pcReq after decoding ===\n");
printf("%s\n",pcReq);
printf ("=============================\n");
pstReq = cJSON_Parse(pcReq);
printf("%d\n", cJSON_GetObjectItem(pstReq, "test")->valueint);
printf("%d\n", cJSON_GetObjectItem(pstReq, "test2")->valueint);
printf("%s\n",cJSON_Print(pstReq));
return EXIT_SUCCESS;
}
我希望这有助于找到问题。