Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* SA-MP JSON Include
- *
- * Copyright © by Kaliber, 2014
- *
- native decode_JSON(const data[], const index[], {Float,_}:...);
- native encode_JSON(const data[], {Float,_}:...);
- */
- #if defined _json_included
- #endinput
- #endif
- #define _json_included
- #if !defined _samp_included
- #include <a_samp>
- #endif
- #define MAX_BUFFER_LEN 32
- #define INVALID 0
- #define ADD 1
- #define ADT 2
- #define ADW 3
- stock decode_JSON(const data[], const index[], {Float,_}:...) {
- new pos = strfind(data,index),pos1 = strfind(data,",",false,pos),buffer[MAX_BUFFER_LEN];
- if(strfind(index,"|") != -ADD) {
- new tmp[ADW][MAX_BUFFER_LEN],t_pos=-ADD;
- strmid(tmp[INVALID],index,strfind(index,"|")+ADD,strfind(index,"|",false,strfind(index,"|")+ADD),MAX_BUFFER_LEN);
- strmid(tmp[ADD],index,INVALID,strfind(index,"|"),MAX_BUFFER_LEN),t_pos=strfind(data,"{",false,strfind(data,tmp[ADD]));
- strmid(tmp[ADT],index,strfind(index,"|",false,strfind(index,"|")+ADD)+ADD,strlen(index),MAX_BUFFER_LEN);
- for(new i; i<strval(tmp[ADT])-ADD; i++) t_pos = strfind(data,"{",false,t_pos+ADD);
- pos = strfind(data,tmp[INVALID],false,t_pos),pos1 = strfind(data,",",false,pos);
- if(pos1 == -ADD) pos1 = strfind(data,"]",false,pos);
- strmid(buffer,data,pos+strlen(tmp[INVALID])+ADT,pos1,MAX_BUFFER_LEN);
- if(buffer[INVALID] == '"') strmid(buffer,data,pos+strlen(tmp[INVALID])+ADW,pos1-ADD,MAX_BUFFER_LEN);
- } else {
- strmid(buffer,data,pos+strlen(index)+ADT,pos1,MAX_BUFFER_LEN);
- if(buffer[INVALID] == '"') strmid(buffer,data,pos+strlen(index)+ADW,pos1-ADD,MAX_BUFFER_LEN);
- }
- if(buffer[strlen(buffer)-ADD] == '}') buffer[strlen(buffer)-ADD] = '\0';
- for(new i; i<MAX_BUFFER_LEN; i++) setarg(ADT,i,buffer[i]);
- return ADD;
- }
- stock encode_JSON(const data[][][], index, {Float,_}:...) {
- new buffer[MAX_BUFFER_LEN * ADW],tmp[MAX_BUFFER_LEN];
- strcat(buffer,"'{");
- for(new i; i<index; i++) {
- 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');
- else format(buffer,sizeof buffer,"%s\"%s\":%s%c",buffer,data[i][0],data[i][1],(i < index-1) ? ',' : '\0');
- }
- strcat(buffer,"}'"),format(tmp,sizeof tmp,"string(%d) ",strlen(buffer)-2),strins(buffer,tmp,0,sizeof buffer);
- for(new i; i<sizeof buffer; i++) setarg(ADT,i,buffer[i]);
- return ADD;
- }
- stock JSON_IsNumeric(c) return(c>'9'||c<'0')?INVALID:ADD;
- #undef MAX_BUFFER_LEN
- #undef INVALID
- #undef ADD
- #undef ADT
- #undef ADW
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement