You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Mind that JSMN_STRICT should be defined, because in other case false is decoded like bunch of primitives! But that is not the point.
From the output you can see that with tokens=NULL, the returned count is 1 when new token is found, not the found tokens so far. I've managed to locate that in jsmn.h in jsmn_parse function -> int count = parser->toknext;. So whit NULL, toknext is never updated and the returned count always starts from 0.
Workaround is to use jsmn_init(&p) in every iteration. But it waste time in checking entire buffer .
The text was updated successfully, but these errors were encountered:
givanov256
changed the title
Not returning proper count when used with tokens=NULL token and stream data
Not returning proper count when used with tokens=NULL and stream data
Mar 24, 2021
Hello, past few days I'm testing JSMN with stream data and NULL token parameter.
Simple example
So, the output is
parse full JSON: 5
i=0, ch={, r=1 {
i=1, ch=", r=-3 {"
i=2, ch=u, r=-3 {"u
i=3, ch=s, r=-3 {"us
i=4, ch=e, r=-3 {"use
i=5, ch=r, r=-3 {"user
i=6, ch=", r=1 {"user"
i=7, ch=:, r=0 {"user":
i=8, ch= , r=0 {"user":
i=9, ch=", r=-3 {"user": "
i=10, ch=j, r=-3 {"user": "j
i=11, ch=o, r=-3 {"user": "jo
i=12, ch=h, r=-3 {"user": "joh
i=13, ch=n, r=-3 {"user": "john
i=14, ch=d, r=-3 {"user": "johnd
i=15, ch=o, r=-3 {"user": "johndo
i=16, ch=e, r=-3 {"user": "johndoe
i=17, ch=", r=1 {"user": "johndoe"
i=18, ch=,, r=0 {"user": "johndoe",
i=19, ch= , r=0 {"user": "johndoe",
i=20, ch=", r=-3 {"user": "johndoe", "
i=21, ch=a, r=-3 {"user": "johndoe", "a
i=22, ch=d, r=-3 {"user": "johndoe", "ad
i=23, ch=m, r=-3 {"user": "johndoe", "adm
i=24, ch=i, r=-3 {"user": "johndoe", "admi
i=25, ch=n, r=-3 {"user": "johndoe", "admin
i=26, ch=", r=1 {"user": "johndoe", "admin"
i=27, ch=:, r=0 {"user": "johndoe", "admin":
i=28, ch= , r=0 {"user": "johndoe", "admin":
i=29, ch=f, r=1 {"user": "johndoe", "admin": f
i=30, ch=a, r=1 {"user": "johndoe", "admin": fa
i=31, ch=l, r=1 {"user": "johndoe", "admin": fal
i=32, ch=s, r=1 {"user": "johndoe", "admin": fals
i=33, ch=e, r=1 {"user": "johndoe", "admin": false
i=34, ch=}, r=0 {"user": "johndoe", "admin": false}
parse stream JSON: 0
Mind that
JSMN_STRICT
should be defined, because in other casefalse
is decoded like bunch of primitives! But that is not the point.From the output you can see that with tokens=NULL, the returned
count
is 1 when new token is found, not the found tokens so far. I've managed to locate that injsmn.h
injsmn_parse
function ->int count = parser->toknext;
. So whit NULL,toknext
is never updated and the returned count always starts from 0.Workaround is to use
jsmn_init(&p)
in every iteration. But it waste time in checking entire buffer .The text was updated successfully, but these errors were encountered: