json lib
Dependents: grove_stream_jpa_sd2 grove_stream_jpa_sd2 grove_stream_jpa_sd2-2 grove_stream_jpa_sd2-3 ... more
Diff: Json.cpp
- Revision:
- 4:ae34010d87e5
- Parent:
- 3:fab591fca1e7
- Child:
- 5:dd98cf00ed9b
diff -r fab591fca1e7 -r ae34010d87e5 Json.cpp --- a/Json.cpp Thu Jun 02 06:08:24 2016 +0000 +++ b/Json.cpp Tue Aug 02 20:21:04 2016 +0000 @@ -23,6 +23,33 @@ delete [] tokens; } +int Json::findKeyIndex ( const char * key, const int &startingAt ) const +{ + int retVal = -1; + + int i = startingAt + 1; + if ( i < 0 ) { + i = 0; + } + + for ( ; i < tokenCount; i++ ) + { + jsmntok_t t = tokens [ i ]; + + if ( t.type == JSMN_KEY ) + { + size_t keyLength = (size_t) ( t.end - t.start ); + if ( ( strlen ( key ) == keyLength ) && ( strncmp ( source + t.start, key, keyLength ) == 0 ) ) + { + retVal = i; + break; + } + } + } + + return retVal; +} + int Json::findKeyIndexIn ( const char * key, const int &parentIndex ) const { int retVal = -1; @@ -121,14 +148,6 @@ return -1; } -inline bool Json::tokenBooleanValue ( const int tokenIndex ) const -{ - if ( type ( tokenIndex ) == JSMN_PRIMITIVE ) - { - return matches ( tokenIndex, "true" ); - } - return false; -} // void Json::print () const // { @@ -149,3 +168,50 @@ // #endif // } +char * Json::unescape ( char * jsonString ) +{ + if ( jsonString != NULL ) + { + int stringIndex = 0; + int indentLevel = 0; + int quoteCount = 0; + for ( int i = 0; jsonString [ i ] != 0; i ++ ) + { + switch ( jsonString [ i ] ) + { + case '{': + indentLevel ++; + break; + + case '}': + indentLevel --; + if ( indentLevel == 0 ) { + // Just close and return the first valid JSON object. No need to handle complex cases. + jsonString [ stringIndex ++ ] = '}'; + jsonString [ stringIndex ] = 0; + return jsonString; + } + break; + + case '\\': + i ++; + break; + + case '"': + quoteCount ++; + break; + } + + if ( indentLevel > 0 ) + { + if ( quoteCount == 0 ) { + return jsonString; //No need to unescape. JsonString needs to be already escaped + } + jsonString [ stringIndex ++ ] = jsonString [ i ]; + } + } + jsonString [ stringIndex ] = 0; + } + + return jsonString; +}