#include <assert.h>
#include <ctype.h> /* isdigit, isprint, isspace */
#include <errno.h>
+#include <math.h> /* fabs */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
{
const int i = parentState->childIndex++;
if( !( i % 2 ) )
- evbuffer_add( data->out, ": ", 2 );
+ evbuffer_add( data->out, ": ", data->doIndent ? 2 : 1 );
else
{
- evbuffer_add( data->out, ", ", 2 );
+ evbuffer_add( data->out, ", ", data->doIndent ? 2 : 1 );
jsonIndent( data );
}
break;
case TR_TYPE_LIST:
{
++parentState->childIndex;
- evbuffer_add( data->out, ", ", 2 );
+ evbuffer_add( data->out, ", ", data->doIndent ? 2 : 1 );
jsonIndent( data );
break;
}
struct jsonWalk * data = vdata;
char locale[128];
- /* json requires a '.' decimal point regardless of locale */
- tr_strlcpy( locale, setlocale( LC_NUMERIC, NULL ), sizeof( locale ) );
- setlocale( LC_NUMERIC, "POSIX" );
- evbuffer_add_printf( data->out, "%f", val->val.d );
- setlocale( LC_NUMERIC, locale );
+ if( fabs( val->val.d ) < 0.00001 )
+ evbuffer_add( data->out, "0", 1 );
+ else {
+ /* json requires a '.' decimal point regardless of locale */
+ tr_strlcpy( locale, setlocale( LC_NUMERIC, NULL ), sizeof( locale ) );
+ setlocale( LC_NUMERIC, "POSIX" );
+ evbuffer_add_printf( data->out, "%.4f", val->val.d );
+ setlocale( LC_NUMERIC, locale );
+ }
jsonChildFunc( data );
}