3

Dave Gamble による cJSON を使用していますが、次の問題があります。cJSON 構造体内の値を変更してから cJSON_Print コマンドを使用すると、更新された値が取得されず、代わりにデフォルト値が取得されます。

#include <stdio.h>
#include <stdlib.h>
#include "cJSON.h"

void main(){
    cJSON *test = cJSON_Parse("{\"type\":       \"rect\", \n\"width\":      1920, \n\"height\":     1080, \n\"interlace\":  false,\"frame rate\": 24\n}");
    printf("cJSONPrint: %s\n  cJSONvalueint: %d\n",cJSON_Print(test), cJSON_GetObjectItem(test,"frame rate")->valueint);
    cJSON_GetObjectItem(test,"frame rate")->valueint=15;
    printf("cJSONPrint: %s\n  cJSONvalueint: %d\n",cJSON_Print(test), cJSON_GetObjectItem(test,"frame rate")->valueint);
}

これは私が小さなテストに使用したコードで、これらの結果が得られます。

cJSONPrint: {
    "type": "rect",
    "width":    1920,
    "height":   1080,
    "interlace":    false,
    "frame rate":   24
}

cJSONvalueint: 24
cJSONPrint: {
    "type": "rect",
    "width":    1920,
    "height":   1080,
    "interlace":    false,
    "frame rate":   24
}
cJSONvalueint: 15

私が間違っていることと、 cJSON_Print コマンドで正しい値を取得する方法を知っている人はいますか?

4

1 に答える 1

4

cJSON_SetIntValueマクロを使用するには、適切な呼び出しが必要だと思います。

valueint だけでなく、valueint と valuedouble をオブジェクトに設定します。

#include <stdio.h>
#include <stdlib.h>
#include "cJSON.h"

void main(){
    cJSON *test = cJSON_Parse("{\"type\":       \"rect\", \n\"width\":      1920, \n\"height\":     1080, \n\"interlace\":  false,\"frame rate\": 24\n}");    
    printf("cJSONPrint: %s\n  cJSONvalueint: %d\n",cJSON_Print(test), cJSON_GetObjectItem(test,"frame rate")->valueint);

    cJSON_SetIntValue(cJSON_GetObjectItem(test, "frame rate"), 15);

    printf("cJSONPrint: %s\n  cJSONvalueint: %d\n",cJSON_Print(test), cJSON_GetObjectItem(test,"frame rate")->valueint);
}

それは戻ります:

$ ./test
cJSONPrint: {
        "type": "rect",
        "width":        1920,
        "height":       1080,
        "interlace":    false,
        "frame rate":   24
}
  cJSONvalueint: 24
cJSONPrint: {
        "type": "rect",
        "width":        1920,
        "height":       1080,
        "interlace":    false,
        "frame rate":   15
}
  cJSONvalueint: 15
于 2015-08-18T16:37:41.943 に答える