C jansson更改文件中的json值

C jansson更改文件中的json值,c,json,file,key-value,jansson,C,Json,File,Key Value,Jansson,我有一个json文件。并且,文件已成功加载。 但是,我想更改如下所示的值 并保存修改后的json文件。 但是,该值根本不会更改和保存。 我怎么办 来自/home/pi/desktop/test.json { "new_one": 1, "new_two" : "do not", "new_three" : true } { "new_one": 234, "new_two" : "do", "new_three" : false } 至/home/pi/desktop/test.json {

我有一个json文件。并且,文件已成功加载。 但是,我想更改如下所示的值 并保存修改后的json文件。 但是,该值根本不会更改和保存。 我怎么办

来自/home/pi/desktop/test.json

{
"new_one": 1,
"new_two" : "do not",
"new_three" : true
}
{
"new_one": 234,
"new_two" : "do",
"new_three" : false
}
至/home/pi/desktop/test.json

{
"new_one": 1,
"new_two" : "do not",
"new_three" : true
}
{
"new_one": 234,
"new_two" : "do",
"new_three" : false
}
所以,我做到了

int main()
{

     json_t *json;
    json_error_t error;
    char *pos;

    json_t *obj = json_object();

    int rc =0 ;
    json = json_load_file("./test.json", 0, &error);

    if (!json)
    {
        fprintf(stderr, "process : json error on line %d: %s\n", error.line, error.text);
        rc = 1;
    }

    const char *key;
    json_t *value;

    void *iter = json_object_iter( json );

    while( iter )
    {
        key = json_object_iter_key(iter);
        value = json_object_iter_value(iter);
        if(!strcmp(key, "new_one")){
            printf("Change Value\n" );
                json_object_set(iter, "new_one", json_integer(1234)); 
            }
        if(!strcmp(key, "new_three")){
            printf("Change Value\n" );
                json_object_set(iter, "new_three", json_string("alert")); 
            }

        iter = json_object_iter_next(json, iter);
    }
    return 0;
}

您缺少对
json\u dump\u file()
的调用,该调用将把修改后的json内容保存到文件中。 因此,在while()循环之后,添加以下内容:

rc = json_dump_file(json, "./test.json", 0);
if (rc) {
    fprintf(stderr, "cannot save json to file\n");
}

json_load_file()返回的json对象完全位于RAM内存中,不再包含与文件的任何关联。因此,对json对象的所有更改仅对内存(而不是文件)进行。您需要将修改后的json对象写入文件。所以,拉夫拉的回答是正确的。这就是我需要的。谢谢