Advertisement
Guest User

JSON Include (c) by Kaliber

a guest
Aug 10th, 2014
297
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.42 KB | None | 0 0
  1. /*  SA-MP JSON Include
  2.  *
  3.  *  Copyright © by Kaliber, 2014
  4.  *
  5.  native decode_JSON(const data[], const index[], {Float,_}:...);
  6.  native encode_JSON(const data[], {Float,_}:...);
  7. */
  8. #if defined _json_included
  9.     #endinput
  10. #endif
  11. #define _json_included
  12. #if !defined _samp_included
  13.     #include <a_samp>
  14. #endif
  15. #define MAX_BUFFER_LEN 32
  16. #define INVALID 0
  17. #define ADD 1
  18. #define ADT 2
  19. #define ADW 3
  20. stock decode_JSON(const data[], const index[], {Float,_}:...) {
  21.     new pos = strfind(data,index),pos1 = strfind(data,",",false,pos),buffer[MAX_BUFFER_LEN];
  22.     if(strfind(index,"|") != -ADD) {
  23.         new tmp[ADW][MAX_BUFFER_LEN],t_pos=-ADD;
  24.         strmid(tmp[INVALID],index,strfind(index,"|")+ADD,strfind(index,"|",false,strfind(index,"|")+ADD),MAX_BUFFER_LEN);
  25.         strmid(tmp[ADD],index,INVALID,strfind(index,"|"),MAX_BUFFER_LEN),t_pos=strfind(data,"{",false,strfind(data,tmp[ADD]));
  26.         strmid(tmp[ADT],index,strfind(index,"|",false,strfind(index,"|")+ADD)+ADD,strlen(index),MAX_BUFFER_LEN);
  27.         for(new i; i<strval(tmp[ADT])-ADD; i++) t_pos = strfind(data,"{",false,t_pos+ADD);
  28.         pos = strfind(data,tmp[INVALID],false,t_pos),pos1 = strfind(data,",",false,pos);
  29.         if(pos1 == -ADD) pos1 = strfind(data,"]",false,pos);
  30.         strmid(buffer,data,pos+strlen(tmp[INVALID])+ADT,pos1,MAX_BUFFER_LEN);
  31.         if(buffer[INVALID] == '"') strmid(buffer,data,pos+strlen(tmp[INVALID])+ADW,pos1-ADD,MAX_BUFFER_LEN);
  32.     } else {
  33.         strmid(buffer,data,pos+strlen(index)+ADT,pos1,MAX_BUFFER_LEN);
  34.         if(buffer[INVALID] == '"') strmid(buffer,data,pos+strlen(index)+ADW,pos1-ADD,MAX_BUFFER_LEN);
  35.     }
  36.     if(buffer[strlen(buffer)-ADD] == '}') buffer[strlen(buffer)-ADD] = '\0';
  37.     for(new i; i<MAX_BUFFER_LEN; i++) setarg(ADT,i,buffer[i]);
  38.     return ADD;
  39. }
  40.  
  41. stock encode_JSON(const data[][][], index, {Float,_}:...) {
  42.     new buffer[MAX_BUFFER_LEN * ADW],tmp[MAX_BUFFER_LEN];
  43.     strcat(buffer,"'{");
  44.     for(new i; i<index; i++) {
  45.         if(!JSON_IsNumeric(data[i][1][0])) format(buffer,sizeof buffer,"%s\"%s\":\"%s\"%c",buffer,data[i][0],data[i][1],(i < index-1) ? ',' : '\0');
  46.         else format(buffer,sizeof buffer,"%s\"%s\":%s%c",buffer,data[i][0],data[i][1],(i < index-1) ? ',' : '\0');
  47.     }
  48.     strcat(buffer,"}'"),format(tmp,sizeof tmp,"string(%d) ",strlen(buffer)-2),strins(buffer,tmp,0,sizeof buffer);
  49.     for(new i; i<sizeof buffer; i++) setarg(ADT,i,buffer[i]);
  50.     return ADD;
  51. }
  52. stock JSON_IsNumeric(c) return(c>'9'||c<'0')?INVALID:ADD;
  53. #undef MAX_BUFFER_LEN
  54. #undef INVALID
  55. #undef ADD
  56. #undef ADT
  57. #undef ADW
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement