JSON.h 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. #ifndef __JSON_H__
  2. #define __JSON_H__
  3. #define JSON_INDENT 1
  4. #define JSON_INDENT_CHAR "\t"
  5. enum JSON_WORD_TYPE
  6. {
  7. JWT_STRING,
  8. JWT_OTHER,
  9. JWT_NONE
  10. };
  11. enum JSON_NODE_TYPE
  12. {
  13. // node = key: [node]
  14. JNT_NODE,
  15. // node = key: [ array ]
  16. JNT_ARRAY,
  17. // node = key: value
  18. JNT_VALUE,
  19. // node = key: "value"
  20. JNT_QUOTED_VALUE
  21. };
  22. enum JSON_SET_FLAGS
  23. {
  24. JSF_NONE = 0,
  25. JSF_IS_FILE = 1,
  26. JSF_IS_UNICODE = 2,
  27. JSF_IS_RAW = 4
  28. };
  29. enum JSON_ESCAPE_FLAGS
  30. {
  31. JEF_NONE = 0,
  32. JEF_ESCAPE_UNICODE = 1,
  33. JEF_QUOTE = 2,
  34. JEF_ALWAYS_QUOTE = 4
  35. };
  36. struct JSON_NODE
  37. {
  38. enum JSON_NODE_TYPE eType;
  39. struct JSON_NODE* pNext;
  40. PTCHAR pszKey;
  41. union
  42. {
  43. PTCHAR pszValue;
  44. struct JSON_NODE* pValue;
  45. };
  46. };
  47. enum JSON_SORT_FLAGS
  48. {
  49. // Sort descending instead of ascending.
  50. JSF_DESCENDING = 1,
  51. // Numeric comparison rather than string.
  52. JSF_NUMERIC = 2,
  53. // Sort case sensitive.
  54. JSF_CASE_SENSITIVE = 4,
  55. // Sort by keys rather than by values.
  56. JSF_BY_KEYS = 8,
  57. // Sort recursively.
  58. JSF_RECURSIVE = 16
  59. };
  60. struct JSON_NODE* JSON_Create();
  61. BOOL JSON_IsTrue(struct JSON_NODE* pNode);
  62. PTCHAR JSON_GetQuotedValue(struct JSON_NODE* pNode, const PTCHAR pszDefaultValue);
  63. void JSON_Delete(struct JSON_NODE** ppNode, struct JSON_NODE* pPrev);
  64. int JSON_Count(struct JSON_NODE* pNode);
  65. struct JSON_NODE* JSON_Get(struct JSON_NODE* pNode, PTCHAR pszKey, BOOL bKeyIsIndex);
  66. struct JSON_NODE* JSON_GetEx(struct JSON_NODE* pNode, PTCHAR pszKey, BOOL bKeyIsIndex, BOOL bCreate, BOOL* pbCreated);
  67. struct JSON_NODE* JSON_Next(struct JSON_NODE** ppNode, PTCHAR pszKey, BOOL bKeyIsIndex, BOOL bCreate, BOOL* pbCreated);
  68. BOOL JSON_Set(struct JSON_NODE* pNode, PBYTE pbValue, enum JSON_SET_FLAGS eFlags);
  69. BOOL JSON_SetEx(struct JSON_NODE* pNode, PTCHAR pszKey, BOOL bKeyIsIndex, PBYTE pbValue, enum JSON_SET_FLAGS eFlags);
  70. BOOL JSON_Serialize(struct JSON_NODE* pNode, PTCHAR pszBuffer, int cchBuffer, BOOL bIsFile, BOOL bAsUnicode, BOOL bFormat);
  71. PTCHAR JSON_SerializeAlloc(struct JSON_NODE* pNode, BOOL bFormat, BOOL bAsPostData);
  72. PTCHAR JSON_Expand(struct JSON_NODE* pNode);
  73. PTCHAR JSON_Escape(PTCHAR pszValue, enum JSON_ESCAPE_FLAGS eFlags);
  74. PCHAR JSON_FromUnicode(PWCHAR pwszText, int* pcchText, UINT nCodePage);
  75. PWCHAR JSON_ToUnicode(PCHAR pszText, int* pcbText);
  76. void JSON_Sort(struct JSON_NODE* pNode, enum JSON_SORT_FLAGS eFlags);
  77. #endif