Advertisement
NovaYoshi

Squirrel DecodeJSON()

Jul 25th, 2014
303
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.21 KB | None | 0 0
  1. void Sq_DecodeJSONTable(HSQUIRRELVM v, cJSON *Item) {
  2.   if(!Item) return;
  3.   while(Item) {
  4.     if(Item->string)
  5.       sq_pushstring(v, Item->string, -1);
  6.     switch(Item->type) {
  7.       case cJSON_False:
  8.         sq_pushbool(v, SQFalse);
  9.         break;
  10.       case cJSON_True:
  11.         sq_pushbool(v, SQTrue);
  12.         break;
  13.       case cJSON_NULL:
  14.         sq_pushnull(v);
  15.         break;
  16.       case cJSON_Number:
  17.         sq_pushinteger(v, Item->valueint);
  18.         break;
  19.       case cJSON_String:
  20.         sq_pushstring(v, Item->valuestring, -1);
  21.         break;
  22.       case cJSON_Array:
  23.         sq_newarray(v, 0);
  24.         Sq_DecodeJSONTable(v, Item->child);
  25.         break;
  26.       case cJSON_Object:
  27.         sq_newtable(v);
  28.         Sq_DecodeJSONTable(v, Item->child);
  29.         break;
  30.     }
  31.     if(Item->string)
  32.       sq_newslot(v,-3,SQFalse);
  33.     else
  34.       sq_arrayappend(v, -2);
  35.     Item = Item->next;
  36.   }
  37. }
  38.  
  39. SQInteger Sq_DecodeJSON(HSQUIRRELVM v) {
  40. // more security than compilestring()
  41.   const SQChar *Str;
  42.   sq_getstring(v, 2, &Str);
  43.  
  44.   cJSON *Root = cJSON_Parse(Str);
  45.   if(!Root || !Root->child) return 0;
  46.   sq_newtable(v);
  47.   Sq_DecodeJSONTable(v, Root->child);
  48.  
  49.   cJSON_Delete(Root);
  50.   return 1;
  51. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement