json.h 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. /*
  2. * File: json.h
  3. * Author: Arthur Brandao
  4. *
  5. * Created on 28 octobre 2018
  6. */
  7. #ifndef JSON_H
  8. #define JSON_H
  9. /* --- Include --- */
  10. #include <string.h>
  11. #include "boolean.h"
  12. /* --- Constante --- */
  13. #define JSON_ERROR -1
  14. #define JSON_OK 0
  15. #define JSON_STRING 1
  16. #define JSON_NUMBER 2
  17. #define JSON_BOOLEAN 3
  18. #define JSON_ARRAY 4
  19. #define JSON_OBJECT 5
  20. /* --- Structure --- */
  21. typedef JsonNode JsonNode;
  22. typedef struct{
  23. char* str; //La chaine de carac json
  24. int elt; //Le nombre d'element
  25. char** key; //La position des clef dans la chaine
  26. char** val; //La position de la valeur
  27. int* key_length; //La taille des clefs
  28. int* val_length; //La taille des valeurs
  29. int* type; //Le type des valeurs
  30. }JsonParser;
  31. typedef struct{
  32. JsonNode* head;
  33. JsonNode* tail;
  34. int length;
  35. }JsonEncoder;
  36. struct JsonNode{
  37. JsonNode* prev;
  38. JsonNode* next;
  39. char* key;
  40. char* val;
  41. };
  42. /* --- Fonctions ---- */
  43. //JsonParser
  44. /**
  45. * Parse une chaine JSON en JsonParser
  46. * Initialise ou écrase les données du JsonParser
  47. * @param JsonParser* La structure de resultat (doit être alloué)
  48. * @param char* La chaine en JSON
  49. * @return int JSON_ERROR en cas d'erreur sinon JSON_OK
  50. */
  51. int json_parse(JsonParser*, char*);
  52. /**
  53. * Donne la clef à un index donné
  54. * @param JsonParser* Le resultat de json_parse
  55. * @param int La position à regarder
  56. * @return char* La clef
  57. */
  58. char* key_index(JsonParser*, int);
  59. /**
  60. * Donne la valeur à un index donné
  61. * @param JsonParser* Le resultat de json_parse
  62. * @param int La position à regarder
  63. * @return char* La valeur
  64. */
  65. char* get_index(JsonParser*, int);
  66. /**
  67. * Donne la positon d'une valeur dans le JsonParser
  68. * @param JsonParser* Le resultat de json_parse
  69. * @param char* La clef lié à la valeur
  70. * @return int La position
  71. */
  72. int get_pos(JsonParser*, char*);
  73. /**
  74. * Retourne le type de la vl=aleur
  75. * @param JsonParser* Le resultat de json_parse
  76. * @param char* La clef lié à la valeur
  77. * @return int constante JSON_XXXX du type de la valeur
  78. */
  79. int get_type(JsonParser*, char*);
  80. /**
  81. * Retourne la valeur d'un element
  82. * @param JsonParser* Le resultat de json_parse
  83. * @param char* La clef lié à la valeur
  84. * @return char* La valeur, NULL en cas d'erreur (clef introuvable)
  85. */
  86. char* get_value(JsonParser*, char*);
  87. /**
  88. * Retourne la valeur d'un element de type number
  89. * @param JsonParser* Le resultat de json_parse
  90. * @param char* La clef lié à la valeur
  91. * @return double La valeur, JSON_ERROR en cas d'erreur (type incorrect, clef introuvable)
  92. */
  93. double get_number(JsonParser*, char*);
  94. /**
  95. * Retourne la valeur d'un element de type number
  96. * @param JsonParser* Le resultat de json_parse
  97. * @param char* La clef lié à la valeur
  98. * @return int La valeur, JSON_ERROR en cas d'erreur (type incorrect, clef introuvable)
  99. */
  100. int get_integer(JsonParser*, char*);
  101. /**
  102. * Retourne la valeur d'un element de type boolean
  103. * @param JsonParser* Le resultat de json_parse
  104. * @param char* La clef lié à la valeur
  105. * @return boolean La valeur, false en cas d'erreur (type incorrect, clef introuvable)
  106. */
  107. boolean get_boolean(JsonParser*, char*);
  108. /**
  109. * Retourne la valeur d'un element de type array
  110. * @param JsonParser* Le resultat de json_parse
  111. * @param char* La clef lié à la valeur
  112. * @return char* La valeur, NULL en cas d'erreur (type incorrect, clef introuvable)
  113. */
  114. char* get_array(JsonParser*, char*);
  115. /**
  116. * Retourne la valeur d'un element de type object
  117. * @param JsonParser* Le resultat de json_parse
  118. * @param char* La clef lié à la valeur
  119. * @return JsonParser* L'object json analysé, NULL en cas d'erreur (type incorrect, clef introuvable, ...)
  120. */
  121. JsonParser* get_object(JsonParser*, char*);
  122. /**
  123. * Supprime un JsonParser
  124. * @param JsonParser* Le JsonParser à supprimer
  125. */
  126. void clean_json_parser(JsonParser*);
  127. //Json Encoder
  128. void ini_encoder(JsonEncoder*);
  129. int add_value(JsonEncoder*, char*, char*);
  130. int add_number(JsonEncoder*, char*, double);
  131. int add_integer(JsonEncoder*, char*, int);
  132. int add_boolean(JsonEncoder*, char*, boolean);
  133. int add_array(JsonEncoder*, char*, char*);
  134. int add_object(JsonEncoder*, char*, JsonEncoder);
  135. char* json_encode(JsonEncoder*);
  136. void clean_json_encoder(JsonEncoder*);
  137. #endif /* JSON_H */