Bonjour,

J'essaye de faire une fonction qui modifie un fichier avec des trames json dedans en C. (j'utilise la librairie json-c)
Les trames JSON ont la forme suivante : {"Machine" : "nom_machine", "Capteur" : "nom_capteur", "Donnee" : [array contenant les données], "Temps" : [array contenant les temps relatif aux données] }
J'essaye donc de modifier le fichier pour rajouter des données dans les arrays Donnee et Temps. La modification du fichier se fait sur un fichier temporaire ou je met l'ensemble des données et effectue les modifications.
Le problème est lorsque je veux rajouter des données dans les arrays, j'importe les arrays dans une autre variable, je supprime les arrays dans les variables de bases, je rajoute les nouvelles valeurs dans la nouvelle variable puis je remet les arrays dans la trame json. Le problème est lorsque je remet les arrays dans la trame json, pas de soucis pour l'array Temps mais l'autre ne veut pas alors qu'elles sont fait par les meme procédure.

Voici le code correspondant a la modification des arrays :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
 static void modifier_fichier(char *str)
{
    int index;
    int i = 0;
 
    //variable qui sert de tampon pour le transfert des lignes
    char str_cmp[MAX_SIZE];
    json_object *jobject_cmp;
    json_object *jarray_donnee_cmp;
    json_object *jarray_temps_cmp;
    char str_double[16];
    //Variable qui va stocker str sous forme de json
    json_object *jobject;
 
    //Variables qui vont stocker les valeurs des champs du json
    char *machine_val, *capteur_val, *date;
    float donnee;
 
     //On rentre la string du buffer dans un json object
    jobject = json_tokener_parse(str);
 
    machine_val = json_object_get_string(json_object_object_get(jobject, "Machine"));
    capteur_val = json_object_get_string(json_object_object_get(jobject, "Capteur"));
    date = json_object_get_string(json_object_array_get_idx(json_object_object_get(jobject, "Temps"),0));
    sscanf(json_object_get_string(json_object_array_get_idx(json_object_object_get(jobject, "Donnee"), 0)), "%f", &donnee);
    printf("donnée : %f \n",donnee);
    index = find_str_file(capteur_val, machine_val);
 
    //On créer les fichiers sources et cible pour faire la modification
    FILE* fichier_source = NULL;
    FILE* fichier_cible = NULL;
 
    fichier_source = fopen("donnée.txt", "r");
    printf("test6 \n");
 
    if(fichier_source != NULL)
    {
        fichier_cible = fopen("donnée.tmp", "a");
 
        if(fichier_cible != NULL)
        {
            while(fgets(str_cmp, MAX_SIZE, fichier_source) != NULL)
            {
                printf("test8 \n");
                //effectue la modification de l'array a l'index qui correspond aux capteurs/machine
                if(i == index)
                {
                    printf("test9 \n");
                    jobject_cmp = json_tokener_parse(str_cmp);
                    printf(" 1 : %s \n",json_object_to_json_string(jobject_cmp));
 
                    //On mémorise les arrays Temps et Donnee
                    jarray_donnee_cmp = json_object_object_get(jobject_cmp, "Donnee");
                    jarray_temps_cmp = json_object_object_get(jobject_cmp, "Temps");
                    printf("test10 \n");
                    //printf(" 1.1 : %s \n",json_object_to_json_string(jarray_temps_cmp));
 
                    //On supprime les arrays Temps et Donnee
                    json_object_object_del(jobject_cmp, "Donnee");
                    json_object_object_del(jobject_cmp, "Temps");
                    //printf(" 2 : %s \n",json_object_to_json_string(jobject_cmp));
                    printf("test11 \n");
 
                    json_object_array_add(jarray_temps_cmp,json_object_new_string(date));
                    sprintf(str_double,"%f",donnee);
                    //printf(" 2.0 : %s \n",str_double);
                    //printf(" 2.00 : %f \n",donnee);
                    //printf("2.000 : %f \n", json_object_new_double(donnee));
                    json_object_array_add(jarray_donnee_cmp,json_object_new_string(str_double));
 
                    printf("test12 \n");
                    printf(" 2.1 : %s \n",json_object_to_json_string(jarray_donnee_cmp)); // <-- le problème est la
                    printf(" 2.2 : %s \n",json_object_to_json_string(jarray_temps_cmp));
 
                    json_object_object_add(jobject_cmp,"Donnee",jarray_donnee_cmp);
                    json_object_object_add(jobject_cmp,"Temps",jarray_temps_cmp);
                    printf("test13 \n");
                    //les modifications viennent d'être effectué sur le json
 
                    //write_file_json(fichier_cible,jobject_cmp);
                    printf("test14 \n");
                }
                else
                {
                    write_file(fichier_cible, str_cmp);
                }
                i++;
            }
            fclose(fichier_cible);
            fclose(fichier_source);
 
            //on supprimer le fichier .txt et on renome le fichier .tmp en .txt
            remove("donnée.txt");
            rename("donnée.tmp","donnée.txt");
        }
        else
        {
            printf("impossible d'ouvrir le fichier donnée.tmp");
            fclose(fichier_source);
        }
    }
    else
    {
        printf("impossible d'ouvrir le fichier donnée.txt");
    }
}
Si quelqu'un a une idée pour trouver la solution de ce problème je suis preneur, ca fait plusieurs heures que je suis dessus..

Merci d'avance !