URLDecode がどのように機能するか、または環境から取得された後の pcReq の元の内容が何であるかを知らずに知ることは困難です。Web なしでこのコードを実行することから始めて、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;
}
これが問題の発見に役立つことを願っています。