static Jsonnode* json_parse_endp(const char *str,const char **endp){ Jsonnode *node; node=parsenumber(str,endp); if(node){SKIPSPACES(*endp); return node;} node=parsestring(str,endp); if(node){SKIPSPACES(*endp); return node;} node=parsebool (str,endp); if(node){SKIPSPACES(*endp); return node;} node=parsenull (str,endp); if(node){SKIPSPACES(*endp); return node;} node=parsearray (str,endp); if(node){SKIPSPACES(*endp); return node;} node=parseobject(str,endp); if(node){SKIPSPACES(*endp); return node;} return NULL; }
static int parsevalue(Parser *p, JSON *parent, JSON **prev) { switch (*p->s) { case '{': return parseobject(p, parent, prev); case '[': return parsearray(p, parent, prev); case '"': return parsestring(p, parent, prev); case 't': return parsetrue(p, parent, prev); case 'f': return parsefalse(p, parent, prev); case 'n': return parsenull(p, parent, prev); case '-': case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': return parsenumber(p, parent, prev); } return 0; }