json.h 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  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 struct{
  22. char* str; //La chaine de carac json
  23. int elt; //Le nombre d'element
  24. char** key; //La position des clef dans la chaine
  25. char** val; //La position de la valeur
  26. int* key_length; //La taille des clefs
  27. int* val_length; //La taille des valeurs
  28. int* type; //Le type des valeurs
  29. }JsonParser;
  30. /* --- Fonctions ---- */
  31. /**
  32. * Parse une chaine JSON en JsonParser
  33. * Initialise ou écrase les données du JsonParser
  34. * @param JsonParser* La structure de resultat (doit être alloué)
  35. * @param char* La chaine en JSON
  36. * @return int JSON_ERROR en cas d'erreur sinon JSON_OK
  37. */
  38. int json_parse(JsonParser*, char*);
  39. /**
  40. * Donne la clef à un index donné
  41. * @param JsonParser* Le resultat de json_parse
  42. * @param int La position à regarder
  43. * @return char* La clef
  44. */
  45. char* key_index(JsonParser*, int);
  46. /**
  47. * Donne la valeur à un index donné
  48. * @param JsonParser* Le resultat de json_parse
  49. * @param int La position à regarder
  50. * @return char* La valeur
  51. */
  52. char* get_index(JsonParser*, int);
  53. /**
  54. * Donne la positon d'une valeur dans le JsonParser
  55. * @param JsonParser* Le resultat de json_parse
  56. * @param char* La clef lié à la valeur
  57. * @return int La position
  58. */
  59. int get_pos(JsonParser*, char*);
  60. /**
  61. * Retourne le type de la vl=aleur
  62. * @param JsonParser* Le resultat de json_parse
  63. * @param char* La clef lié à la valeur
  64. * @return int constante JSON_XXXX du type de la valeur
  65. */
  66. int get_type(JsonParser*, char*);
  67. /**
  68. * Retourne la valeur d'un element
  69. * @param JsonParser* Le resultat de json_parse
  70. * @param char* La clef lié à la valeur
  71. * @return char* La valeur, NULL en cas d'erreur (clef introuvable)
  72. */
  73. char* get_value(JsonParser*, char*);
  74. /**
  75. * Retourne la valeur d'un element de type number
  76. * @param JsonParser* Le resultat de json_parse
  77. * @param char* La clef lié à la valeur
  78. * @return double La valeur, JSON_ERROR en cas d'erreur (type incorrect, clef introuvable)
  79. */
  80. double get_number(JsonParser*, char*);
  81. /**
  82. * Retourne la valeur d'un element de type number
  83. * @param JsonParser* Le resultat de json_parse
  84. * @param char* La clef lié à la valeur
  85. * @return int La valeur, JSON_ERROR en cas d'erreur (type incorrect, clef introuvable)
  86. */
  87. int get_integer(JsonParser*, char*);
  88. /**
  89. * Retourne la valeur d'un element de type boolean
  90. * @param JsonParser* Le resultat de json_parse
  91. * @param char* La clef lié à la valeur
  92. * @return boolean La valeur, false en cas d'erreur (type incorrect, clef introuvable)
  93. */
  94. boolean get_boolean(JsonParser*, char*);
  95. /**
  96. * Retourne la valeur d'un element de type array
  97. * @param JsonParser* Le resultat de json_parse
  98. * @param char* La clef lié à la valeur
  99. * @return char* La valeur, NULL en cas d'erreur (type incorrect, clef introuvable)
  100. */
  101. char* get_array(JsonParser*, char*);
  102. /**
  103. * Retourne la valeur d'un element de type object
  104. * @param JsonParser* Le resultat de json_parse
  105. * @param char* La clef lié à la valeur
  106. * @return JsonParser* L'object json analysé, NULL en cas d'erreur (type incorrect, clef introuvable, ...)
  107. */
  108. JsonParser* get_object(JsonParser*, char*);
  109. /**
  110. * Supprime un JsonParser
  111. * @param JsonParser* Le JsonParser à supprimer
  112. */
  113. void clean_json_parser(JsonParser*);
  114. #endif /* JSON_H */