|
|
| version 1.10, 2024/10/28 09:58:51 | version 1.10.4.1, 2024/12/04 17:46:50 |
|---|---|
| Line 589 json_findbykey(const char *jstr, const char *key, jtyp | Line 589 json_findbykey(const char *jstr, const char *key, jtyp |
| } | } |
| /* | /* |
| * json_findbykeyatscope() - Find token data by key at particular scope | |
| * | |
| * @scope = Search at object scope, =0 main object scope | |
| * @jstr = JSON string | |
| * @key = Search key | |
| * @type = Search key for particular token type, if is J_UNDEF this mean any type | |
| * @toks = Parsed tokens | |
| * @toksnum = Number of parsed tokens | |
| * return: =NULL error or !=NULL data token found | |
| */ | |
| jtok_t * | |
| json_findbykeyatscope(long scope, const char *jstr, const char *key, jtype_t type, jtok_t * __restrict toks, int toksnum) | |
| { | |
| jtok_t *tok = NULL; | |
| register int i; | |
| int klen; | |
| if (!jstr || !key || !toks) | |
| return NULL; | |
| else | |
| klen = strlen(key); | |
| for (i = 1; i < toksnum; i++) { | |
| if (toks[i].tok_type == J_STRING && toks[i].tok_size == 1 && | |
| toks[i].tok_parent == scope && | |
| klen == toks[i].tok_end - toks[i].tok_start && | |
| !strncmp(jstr + toks[i].tok_start, key, klen)) { | |
| if (type != J_UNDEF) { | |
| if (toks[i + 1].tok_type == type) { | |
| tok = toks + i + 1; | |
| break; | |
| } | |
| } else { | |
| tok = toks + i + 1; | |
| break; | |
| } | |
| } | |
| } | |
| return tok; | |
| } | |
| /* | |
| * json_findbypos() - Find token by position on JSON string | * json_findbypos() - Find token by position on JSON string |
| * | * |
| * @pos = Offset from begin of JSON string | * @pos = Offset from begin of JSON string |
| Line 1246 json_dump(FILE *f, const char *jstr, jtok_t *toks, int | Line 1289 json_dump(FILE *f, const char *jstr, jtok_t *toks, int |
| } | } |
| return 0; | return 0; |
| } | |
| /* | |
| * json_objscope() - Find object scope of key | |
| * | |
| * @key = Key of object, if it is =NULL, then return 0 (default scope) | |
| * @jstr = JSON string | |
| * @toks = JSON tokens | |
| * @toksnum = Number of tokens | |
| * return: -1 on error or >=0 scope of object | |
| */ | |
| long | |
| json_objscope(const char *key, const char *jstr, jtok_t * __restrict toks, int toksnum) | |
| { | |
| long scope = 0; | |
| register int i; | |
| int klen; | |
| if (!key) | |
| return 0; /* default scope */ | |
| if (!jstr || !toks) | |
| return -1; | |
| else | |
| klen = strlen(key); | |
| for (i = 1; i < toksnum; i++) | |
| if (toks[i].tok_type == J_STRING && toks[i].tok_size == 1 && | |
| klen == toks[i].tok_end - toks[i].tok_start && | |
| !strncmp(jstr + toks[i].tok_start, key, klen)) | |
| if (toks[i + 1].tok_type == J_OBJECT) { | |
| scope = toks[i + 1].tok_idx; | |
| break; | |
| } | |
| return scope; | |
| } | } |