Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion examples/03_parsing_database.c
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,8 @@ bool parse_person(Jimp *jimp, Person *p)
if (!jimp_number(jimp)) return false;
p->body_count = jimp->number;
} else {
jimp_unknown_member(jimp);
// jimp_unknown_member(jimp);
jimp_skip_member(jimp);
return false;
}
}
Expand Down
3 changes: 2 additions & 1 deletion examples/database.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@
"location": "Wonderland",
"body_count": 150,
"name": "Alice Smith",
"age": 34
"age": 34,
"height": 6
},
{
"name": "Bob Johnson",
Expand Down
35 changes: 35 additions & 0 deletions jimp.h
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,9 @@ bool jimp_is_string_ahead(Jimp *jimp);
bool jimp_is_array_ahead(Jimp *jimp);
bool jimp_is_object_ahead(Jimp *jimp);

/// Skips the member in the object
bool jimp_skip_member(Jimp *jimp);

#endif // JIMP_H_

#ifdef JIMP_IMPLEMENTATION
Expand Down Expand Up @@ -445,4 +448,36 @@ static bool jimp__expect_token(Jimp *jimp, Jimp_Token token)
return true;
}

bool jimp_skip_member(Jimp *jimp) {
if (!jimp__get_token(jimp)) return false;
switch(jimp->token) {
case JIMP_NULL:
case JIMP_TRUE:
case JIMP_FALSE:
case JIMP_NUMBER:
case JIMP_STRING:
return true;
case JIMP_OBRACKET: {
while(jimp_array_item(jimp)) {
if (!jimp_skip_member(jimp)) return false;
}
return jimp_array_end(jimp);
} break;
case JIMP_OCURLY: {
while(jimp_object_member(jimp)) {
if (!jimp_skip_member(jimp)) return false;
}
return jimp_object_end(jimp);
} break;
case JIMP_INVALID:
case JIMP_EOF:
case JIMP_CCURLY:
case JIMP_CBRACKET:
case JIMP_COMMA:
case JIMP_COLON:
default: return false;
}
return false;
}

#endif // JIMP_IMPLEMENTATION