fix json object dump. valid json.
This commit is contained in:
parent
9150e8ed50
commit
d22d2f560e
@ -746,6 +746,8 @@ public:
|
||||
WaitEntry m_waitEntry;
|
||||
|
||||
bool m_isFirstTime;
|
||||
bool m_printedFirstBracket;
|
||||
bool m_printedItem;
|
||||
|
||||
bool m_needsMime;
|
||||
char m_rdbId;
|
||||
@ -878,6 +880,9 @@ bool sendBackDump ( TcpSocket *sock, HttpRequest *hr ) {
|
||||
st->m_fmt = fmt;
|
||||
st->m_isFirstTime = true;
|
||||
|
||||
st->m_printedFirstBracket = false;
|
||||
st->m_printedItem = false;
|
||||
|
||||
// begin the possible segmented process of sending back spiderdb
|
||||
// to the user's browser
|
||||
st->sendBackDump2();
|
||||
@ -1037,6 +1042,13 @@ bool StateCD::sendList ( ) {
|
||||
|
||||
//CollectionRec *cr = g_collectiondb.getRec ( m_collnum );
|
||||
|
||||
|
||||
if ( ! m_printedFirstBracket && m_fmt == FMT_JSON ) {
|
||||
sb.safePrintf("[\n");
|
||||
m_printedFirstBracket = true;
|
||||
}
|
||||
|
||||
|
||||
// we set this to true below if any one shard has more spiderdb
|
||||
// records left to read
|
||||
m_someoneNeedsMore = false;
|
||||
@ -1101,6 +1113,12 @@ bool StateCD::sendList ( ) {
|
||||
}
|
||||
|
||||
|
||||
// if nobody needs to read more...
|
||||
if ( m_rdbId == RDB_TITLEDB && m_fmt == FMT_JSON ) {
|
||||
// end array of json objects. might be empty!
|
||||
sb.safePrintf("\n]");
|
||||
}
|
||||
|
||||
// if first time, send it back
|
||||
if ( m_needsMime ) {
|
||||
// only do once
|
||||
@ -1469,14 +1487,17 @@ void StateCD::printTitledbList ( RdbList *list,SafeBuf *sb,char **lastKeyPtr){
|
||||
|
||||
CollectionRec *cr = g_collectiondb.getRec ( m_collnum );
|
||||
|
||||
// save it
|
||||
*lastKeyPtr = NULL;
|
||||
|
||||
// parse through it
|
||||
for ( ; ! list->isExhausted() ; list->skipCurrentRec() ) {
|
||||
// this record is either a SpiderRequest or SpiderReply
|
||||
char *rec = list->getCurrentRec();
|
||||
// save it
|
||||
*lastKeyPtr = NULL;
|
||||
// skip ifnegative
|
||||
if ( (rec[0] & 0x01) == 0x00 ) continue;
|
||||
// set it
|
||||
*lastKeyPtr = rec;
|
||||
// reset first since set2() can't call reset()
|
||||
xd.reset();
|
||||
// uncompress it
|
||||
@ -1517,6 +1538,11 @@ void StateCD::printTitledbList ( RdbList *list,SafeBuf *sb,char **lastKeyPtr){
|
||||
// get the json content
|
||||
char *json = xd.ptr_utf8Content;
|
||||
|
||||
if ( m_printedItem )
|
||||
sb->safePrintf("\n,\n");
|
||||
|
||||
m_printedItem = true;
|
||||
|
||||
// just print that out. encode \n's and \r's back to \\n \\r
|
||||
// and backslash to a \\ ...
|
||||
// but if they originally had a \u<backslash> encoding and
|
||||
@ -1526,7 +1552,7 @@ void StateCD::printTitledbList ( RdbList *list,SafeBuf *sb,char **lastKeyPtr){
|
||||
log("diffbot: error printing json in dump");
|
||||
|
||||
// separate each JSON object with \n i guess
|
||||
sb->pushChar('\n');
|
||||
//sb->pushChar('\n');
|
||||
|
||||
}
|
||||
}
|
||||
@ -2742,7 +2768,7 @@ bool printCrawlBotPage2 ( TcpSocket *socket ,
|
||||
if ( fmt == FMT_HTML )
|
||||
sb.safePrintf ( "</center><br/>" );
|
||||
|
||||
// the ROOT JSON {
|
||||
// the ROOT JSON [
|
||||
if ( fmt == FMT_JSON )
|
||||
sb.safePrintf("{\n");
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user