json-c array Sortieren



  • Hallo zusammen,

    ich möchte, meine JSON Inhalt in einer array nach einem Bestimmten Wert Sortieren lassen,
    nutze die Bibliothek json-c und es gib unter:

    https://github.com/rbtylee/tutorial-jsonc/blob/master/tutorial/sort.md

    ein Beispiel, für eine einfache Sortierung, meine JSON sieht aber so aus:

       [
           {
               "POS": 0,
               "ID": "2545327648",
               "UPDATE": 1755892547,
               "FILE_SIZE": "34428674",
               "IS_ACTIV": "false"
           },
           {
               "POS": 4,
               "ID": "1559212036",
               "UPDATE": 1745501111,
               "FILE_SIZE": "525685",
               "IS_ACTIV": "false"
           },
           {
               "POS": 2,
               "ID": "2796703209",
               "UPDATE": 1720644377,
               "FILE_SIZE": "1174863",
               "IS_ACTIV": "true"
           },
           {
               "POS": 1,
               "ID": "2291785308",
               "UPDATE": 1756819745,
               "FILE_SIZE": "51587989",
               "IS_ACTIV": "false"
           },
           {
               "POS": 3,
               "ID": "2116151222",
               "UPDATE": 1755866671,
               "FILE_SIZE": "122657596",
               "IS_ACTIV": "ture"
           }
       ]
    

    und möchte das ganze nach POS aufsteigend Sortieren lassen.

    Sorry habe aber absolut keinen Ansatzplan, wie ich das umsetzte.

    Gruß



  • Dafür benötigst du dann die Funktion json_object_object_get, um ein Unterelement (z.B. "POS") zu lesen.
    Rufe diese dann zuerst anstatt von json_object_get_int oder json_object_get_string (aus deinem gezeigten Link) auf und vergleiche dann dessen Werte (entsprechend des Datentyps).

    PS: In deinem letzten Element steht "IS_ACTIV": "ture" (anstatt "true";- )
    Und im englischen heißt es active (mit e).



  • Hallo,

    vielen dank für die kleinen Hinweise der Schreibfehler, leider komme ich so nicht weiter, hier mal mein Code aber Verstehe nicht, wie ich dies Sortieren kann:

    JSON:

    {
        "LIST": [
    		       {
    		           "POS": 0,
    		           "ID": "2545327648",
    		           "UPDATE": 1755892547,
    		           "FILE_SIZE": "34428674",
    		           "IS_ACTIVE": "false"
    		       },
    		       {
    		           "POS": 4,
    		           "ID": "1559212036",
    		           "UPDATE": 1745501111,
    		           "FILE_SIZE": "525685",
    		           "IS_ACTIVE": "false"
    		       },
    		       {
    		           "POS": 2,
    		           "ID": "2796703209",
    		           "UPDATE": 1720644377,
    		           "FILE_SIZE": "1174863",
    		           "IS_ACTIVE": "ture"
    		       },
    		       {
    		           "POS": 1,
    		           "ID": "2291785308",
    		           "UPDATE": 1756819745,
    		           "FILE_SIZE": "51587989",
    		           "IS_ACTIVE": "false"
    		       },
    		       {
    		           "POS": 3,
    		           "ID": "2116151222",
    		           "UPDATE": 1755866671,
    		           "FILE_SIZE": "122657596",
    		           "IS_ACTIVE": "ture"
    		       }
    		   ] 
    }
    

    C:

    #include <stdio.h>
    #include <json-c/json.h>
    
    int main(int argc, char const *argv[]) {
    	json_object *JSON_FILE = json_object_from_file("./Config.json");
    	json_object *LIST = json_object_object_get(JSON_FILE, "LIST");
    
    	size_t LIST_Len = json_object_array_length(LIST);
    
    	for (int a = 0; a < LIST_Len; a++) {
                json_object *OBJ = json_object_array_get_idx(LIST, a);
                json_object *ID = json_object_object_get(OBJ, "ID");
                json_object *POS = json_object_object_get(OBJ, "POS");
                printf("\t[%d] = %s (%s)\n", (int)a + 1, json_object_get_string(ID), json_object_get_string(POS));
            }
    
    	return 0;
    }
    

    Ausgabe:

    [1] = 2545327648 (0)
    [2] = 1559212036 (4)
    [3] = 2796703209 (2)
    [4] = 2291785308 (1)
    [5] = 2116151222 (3)
    

    Ich weiß leider nicht wie ich dies jetzt nach POS Sortieren kann.

    Gruß


Anmelden zum Antworten