mirror of
				https://github.com/bblanchon/ArduinoJson.git
				synced 2025-11-04 00:21:36 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			71 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			71 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
/*
 | 
						|
* Arduino JSON library
 | 
						|
* Benoit Blanchon 2014 - MIT License
 | 
						|
*/
 | 
						|
 | 
						|
#include "JsonToken.h"
 | 
						|
 | 
						|
using namespace ArduinoJson::Parser;
 | 
						|
 | 
						|
char* JsonToken::getText()
 | 
						|
{
 | 
						|
    char* s = json + token->start;
 | 
						|
    json[token->end] = 0;
 | 
						|
 | 
						|
    unescapeString(s);
 | 
						|
 | 
						|
    return s;
 | 
						|
}
 | 
						|
 | 
						|
inline void JsonToken::unescapeString(char* s)
 | 
						|
{
 | 
						|
    char* readPtr = s;
 | 
						|
    char* writePtr = s;
 | 
						|
    char c;
 | 
						|
 | 
						|
    do
 | 
						|
    {
 | 
						|
        c = *readPtr++;
 | 
						|
 | 
						|
        if (c == '\\')
 | 
						|
        {
 | 
						|
            c = unescapeChar(*readPtr++);
 | 
						|
        }
 | 
						|
 | 
						|
        *writePtr++ = c;
 | 
						|
 | 
						|
    } while (c != 0);
 | 
						|
}
 | 
						|
 | 
						|
inline char JsonToken::unescapeChar(char c)
 | 
						|
{
 | 
						|
    // Optimized for code size on a 8-bit AVR
 | 
						|
 | 
						|
    const char* p = "b\bf\fn\nr\rt\t";
 | 
						|
 | 
						|
    while (true)
 | 
						|
    {
 | 
						|
        if (p[0] == 0) return c;
 | 
						|
        if (p[0] == c) return p[1];
 | 
						|
        p += 2;
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
JsonToken JsonToken::nextSibling() const
 | 
						|
{
 | 
						|
    // start with current token
 | 
						|
    jsmntok_t* t = token;
 | 
						|
 | 
						|
    // count the number of token to skip
 | 
						|
    int yetToVisit = 1;
 | 
						|
    
 | 
						|
    // skip all nested tokens
 | 
						|
    while (yetToVisit)
 | 
						|
    {
 | 
						|
        yetToVisit += t->size - 1;
 | 
						|
        t++;
 | 
						|
    }
 | 
						|
 | 
						|
    // build a JsonToken at the new location
 | 
						|
    return JsonToken(json, t);
 | 
						|
} |