forked from lda/telodendria
Fix a few bugs in JsonDecode(). It should now properly decode objects.
This commit is contained in:
parent
2e6c129263
commit
f6851de75f
1 changed files with 8 additions and 8 deletions
16
src/Json.c
16
src/Json.c
|
@ -728,7 +728,7 @@ JsonTokenSeek(JsonParserState * state)
|
||||||
{
|
{
|
||||||
if (c == '.')
|
if (c == '.')
|
||||||
{
|
{
|
||||||
if (state->tokenLen > 1)
|
if (state->tokenLen > 1 && !isFloat)
|
||||||
{
|
{
|
||||||
isFloat = 1;
|
isFloat = 1;
|
||||||
}
|
}
|
||||||
|
@ -738,8 +738,7 @@ JsonTokenSeek(JsonParserState * state)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (!isdigit(c))
|
||||||
if (!isdigit(c))
|
|
||||||
{
|
{
|
||||||
ungetc(c, state->stream);
|
ungetc(c, state->stream);
|
||||||
break;
|
break;
|
||||||
|
@ -791,10 +790,12 @@ JsonTokenSeek(JsonParserState * state)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
state->token[0] = c;
|
||||||
|
|
||||||
switch (c)
|
switch (c)
|
||||||
{
|
{
|
||||||
case 't':
|
case 't':
|
||||||
if (!fgets(state->token, 5, state->stream))
|
if (!fgets(state->token + 1, 4, state->stream))
|
||||||
{
|
{
|
||||||
state->tokenType = TOKEN_EOF;
|
state->tokenType = TOKEN_EOF;
|
||||||
return;
|
return;
|
||||||
|
@ -811,7 +812,7 @@ JsonTokenSeek(JsonParserState * state)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'f':
|
case 'f':
|
||||||
if (!fgets(state->token, 6, state->stream))
|
if (!fgets(state->token + 1, 5, state->stream))
|
||||||
{
|
{
|
||||||
state->tokenType = TOKEN_EOF;
|
state->tokenType = TOKEN_EOF;
|
||||||
return;
|
return;
|
||||||
|
@ -828,7 +829,7 @@ JsonTokenSeek(JsonParserState * state)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'n':
|
case 'n':
|
||||||
if (!fgets(state->token, 5, state->stream))
|
if (!fgets(state->token + 1, 4, state->stream))
|
||||||
{
|
{
|
||||||
state->tokenType = TOKEN_EOF;
|
state->tokenType = TOKEN_EOF;
|
||||||
return;
|
return;
|
||||||
|
@ -918,7 +919,6 @@ JsonDecodeObject(JsonParserState * state)
|
||||||
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
|
|
||||||
JsonTokenSeek(state);
|
JsonTokenSeek(state);
|
||||||
if (JsonExpect(state, TOKEN_STRING))
|
if (JsonExpect(state, TOKEN_STRING))
|
||||||
{
|
{
|
||||||
|
@ -1018,7 +1018,7 @@ JsonDecodeArray(JsonParserState * state)
|
||||||
goto error;
|
goto error;
|
||||||
} while (!JsonExpect(state, TOKEN_EOF));
|
} while (!JsonExpect(state, TOKEN_EOF));
|
||||||
|
|
||||||
return NULL;
|
return arr;
|
||||||
error:
|
error:
|
||||||
for (i = 0; i < ArraySize(arr); i++)
|
for (i = 0; i < ArraySize(arr); i++)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue