open-source-search-engine/Json.h
Matt Wells e346a14a47 added logic to retry diffbot reply on connection reset,
connection timed out or gateway timed out (http status 504)
msgs.  added logic to detect truncated json (missing final })
and not print it. also, at index time, we set a diffbot missing
curly error to g_errno so the whole url can be retried later.
2015-03-09 20:54:34 -07:00

95 lines
1.8 KiB
C++

#ifndef JSON_H
#define JSON_H
#define JT_NULL 2
#define JT_NUMBER 3
#define JT_STRING 4
#define JT_ARRAY 5
#define JT_OBJECT 6
//#define JT_IsReference 256
#include "gb-include.h"
#include "Unicode.h"
#include "SafeBuf.h"
#define MAXJSONPARENTS 64
bool endsInCurly ( char *s , int32_t slen );
class JsonItem {
public:
// scan the linked list
class JsonItem *m_next,*m_prev;
class JsonItem *m_parent;//child;
// the JT_* values above
int m_type;
// . the NAME of the item
// . points into the ORIGINAL json string
char *m_name;
int32_t m_nameLen;
// for JT_NUMBER
int32_t m_valueLong;
// for JT_NUMBER
double m_valueDouble;
// for JT_String
int32_t m_valueLen;
char *m_valueArray;
// for JT_String
int32_t getValueLen() { return m_valueLen; };
// for arrays (JT_ARRAY), hack the char ptr into m_valueLong
char *getArrayStart() { return m_valueArray;}; //(char *)m_valueLong; }
int32_t getArrayLen () { return m_valueLen; };
// for JT_String
char *getValue () {
// if value is another json object, then return NULL
// must be string
if ( m_type != JT_STRING ) return NULL;
// otherwie return the string which is stored decoded
// after this object in the same buffer
return (char *)this + sizeof(JsonItem);
};
// convert nubers and bools to strings for this one
char *getValueAsString ( int32_t *valueLen ) ;
// like acme.product.offerPrice if "acme:{product:{offerprice:1.23}}"
bool getCompoundName ( SafeBuf &nameBuf ) ;
bool isInArray ( );
};
class Json {
public:
void test();
JsonItem *parseJsonStringIntoJsonItems ( char *json , int32_t niceness );
JsonItem *getFirstItem ( ) ;
JsonItem *getItem ( char *name );
JsonItem *addNewItem ();
Json() { m_stackPtr = 0; m_prev = NULL; };
SafeBuf m_sb;
JsonItem *m_stack[MAXJSONPARENTS];
int32_t m_stackPtr;
class JsonItem *m_prev;
};
#endif