53
53
#endif
54
54
#endif
55
55
56
+ const char * json_number_chars = "0123456789.+-eE" ; /* Unused, but part of public API, drop for 1.0 */
56
57
const char * json_hex_chars = "0123456789abcdefABCDEF" ;
57
58
58
59
static void json_object_generic_delete (struct json_object * jso );
@@ -64,6 +65,12 @@ static void json_object_generic_delete(struct json_object *jso);
64
65
#define inline
65
66
#endif
66
67
68
+ /* define colors */
69
+ #define ANSI_COLOR_RESET "\033[0m"
70
+ #define ANSI_COLOR_FG_GREEN "\033[0;32m"
71
+ #define ANSI_COLOR_FG_BLUE "\033[0;34m"
72
+ #define ANSI_COLOR_FG_MAGENTA "\033[0;35m"
73
+
67
74
/*
68
75
* Helper functions to more safely cast to a particular type of json_object
69
76
*/
@@ -460,35 +467,45 @@ static int json_object_object_to_json_string(struct json_object *jso, struct pri
460
467
struct json_object_iter iter ;
461
468
462
469
printbuf_strappend (pb , "{" /*}*/ );
463
- if (flags & JSON_C_TO_STRING_PRETTY )
464
- printbuf_strappend (pb , "\n" );
465
470
json_object_object_foreachC (jso , iter )
466
471
{
467
472
if (had_children )
468
473
{
469
474
printbuf_strappend (pb , "," );
470
- if (flags & JSON_C_TO_STRING_PRETTY )
471
- printbuf_strappend (pb , "\n" );
472
475
}
476
+ if (flags & JSON_C_TO_STRING_PRETTY )
477
+ printbuf_strappend (pb , "\n" );
473
478
had_children = 1 ;
474
479
if (flags & JSON_C_TO_STRING_SPACED && !(flags & JSON_C_TO_STRING_PRETTY ))
475
480
printbuf_strappend (pb , " " );
476
481
indent (pb , level + 1 , flags );
482
+ if (flags & JSON_C_TO_STRING_COLOR )
483
+ printbuf_strappend (pb , ANSI_COLOR_FG_BLUE );
484
+
477
485
printbuf_strappend (pb , "\"" );
478
486
json_escape_str (pb , iter .key , strlen (iter .key ), flags );
487
+ printbuf_strappend (pb , "\"" );
488
+
489
+ if (flags & JSON_C_TO_STRING_COLOR )
490
+ printbuf_strappend (pb , ANSI_COLOR_RESET );
491
+
479
492
if (flags & JSON_C_TO_STRING_SPACED )
480
- printbuf_strappend (pb , "\" : " );
493
+ printbuf_strappend (pb , ": " );
481
494
else
482
- printbuf_strappend (pb , "\":" );
483
- if (iter .val == NULL )
495
+ printbuf_strappend (pb , ":" );
496
+
497
+ if (iter .val == NULL ) {
498
+ if (flags & JSON_C_TO_STRING_COLOR )
499
+ printbuf_strappend (pb , ANSI_COLOR_FG_MAGENTA );
484
500
printbuf_strappend (pb , "null" );
485
- else if (iter .val -> _to_json_string (iter .val , pb , level + 1 , flags ) < 0 )
501
+ if (flags & JSON_C_TO_STRING_COLOR )
502
+ printbuf_strappend (pb , ANSI_COLOR_RESET );
503
+ } else if (iter .val -> _to_json_string (iter .val , pb , level + 1 , flags ) < 0 )
486
504
return -1 ;
487
505
}
488
- if (flags & JSON_C_TO_STRING_PRETTY )
506
+ if (( flags & JSON_C_TO_STRING_PRETTY ) && had_children )
489
507
{
490
- if (had_children )
491
- printbuf_strappend (pb , "\n" );
508
+ printbuf_strappend (pb , "\n" );
492
509
indent (pb , level , flags );
493
510
}
494
511
if (flags & JSON_C_TO_STRING_SPACED && !(flags & JSON_C_TO_STRING_PRETTY ))
@@ -629,9 +646,18 @@ void json_object_object_del(struct json_object *jso, const char *key)
629
646
static int json_object_boolean_to_json_string (struct json_object * jso , struct printbuf * pb ,
630
647
int level , int flags )
631
648
{
649
+ int ret ;
650
+
651
+ if (flags & JSON_C_TO_STRING_COLOR )
652
+ printbuf_strappend (pb , ANSI_COLOR_FG_MAGENTA );
653
+
632
654
if (JC_BOOL (jso )-> c_boolean )
633
- return printbuf_strappend (pb , "true" );
634
- return printbuf_strappend (pb , "false" );
655
+ ret = printbuf_strappend (pb , "true" );
656
+ else
657
+ ret = printbuf_strappend (pb , "false" );
658
+ if (ret > -1 && flags & JSON_C_TO_STRING_COLOR )
659
+ return printbuf_strappend (pb , ANSI_COLOR_RESET );
660
+ return ret ;
635
661
}
636
662
637
663
struct json_object * json_object_new_boolean (json_bool b )
@@ -1011,7 +1037,7 @@ static int json_object_double_to_json_string_format(struct json_object *jso, str
1011
1037
}
1012
1038
else
1013
1039
{
1014
- const char * std_format = "%.16g " ;
1040
+ const char * std_format = "%.17g " ;
1015
1041
int format_drops_decimals = 0 ;
1016
1042
int looks_numeric = 0 ;
1017
1043
@@ -1220,9 +1246,13 @@ static int json_object_string_to_json_string(struct json_object *jso, struct pri
1220
1246
int level , int flags )
1221
1247
{
1222
1248
ssize_t len = JC_STRING (jso )-> len ;
1249
+ if (flags & JSON_C_TO_STRING_COLOR )
1250
+ printbuf_strappend (pb , ANSI_COLOR_FG_GREEN );
1223
1251
printbuf_strappend (pb , "\"" );
1224
1252
json_escape_str (pb , get_string_component (jso ), len < 0 ? - (ssize_t )len : len , flags );
1225
1253
printbuf_strappend (pb , "\"" );
1254
+ if (flags & JSON_C_TO_STRING_COLOR )
1255
+ printbuf_strappend (pb , ANSI_COLOR_RESET );
1226
1256
return 0 ;
1227
1257
}
1228
1258
@@ -1381,31 +1411,34 @@ static int json_object_array_to_json_string(struct json_object *jso, struct prin
1381
1411
size_t ii ;
1382
1412
1383
1413
printbuf_strappend (pb , "[" );
1384
- if (flags & JSON_C_TO_STRING_PRETTY )
1385
- printbuf_strappend (pb , "\n" );
1386
1414
for (ii = 0 ; ii < json_object_array_length (jso ); ii ++ )
1387
1415
{
1388
1416
struct json_object * val ;
1389
1417
if (had_children )
1390
1418
{
1391
1419
printbuf_strappend (pb , "," );
1392
- if (flags & JSON_C_TO_STRING_PRETTY )
1393
- printbuf_strappend (pb , "\n" );
1394
1420
}
1421
+ if (flags & JSON_C_TO_STRING_PRETTY )
1422
+ printbuf_strappend (pb , "\n" );
1395
1423
had_children = 1 ;
1396
1424
if (flags & JSON_C_TO_STRING_SPACED && !(flags & JSON_C_TO_STRING_PRETTY ))
1397
1425
printbuf_strappend (pb , " " );
1398
1426
indent (pb , level + 1 , flags );
1399
1427
val = json_object_array_get_idx (jso , ii );
1400
- if (val == NULL )
1428
+ if (val == NULL ) {
1429
+
1430
+ if (flags & JSON_C_TO_STRING_COLOR )
1431
+ printbuf_strappend (pb , ANSI_COLOR_FG_MAGENTA );
1401
1432
printbuf_strappend (pb , "null" );
1402
- else if (val -> _to_json_string (val , pb , level + 1 , flags ) < 0 )
1433
+ if (flags & JSON_C_TO_STRING_COLOR )
1434
+ printbuf_strappend (pb , ANSI_COLOR_RESET );
1435
+
1436
+ } else if (val -> _to_json_string (val , pb , level + 1 , flags ) < 0 )
1403
1437
return -1 ;
1404
1438
}
1405
- if (flags & JSON_C_TO_STRING_PRETTY )
1439
+ if (( flags & JSON_C_TO_STRING_PRETTY ) && had_children )
1406
1440
{
1407
- if (had_children )
1408
- printbuf_strappend (pb , "\n" );
1441
+ printbuf_strappend (pb , "\n" );
1409
1442
indent (pb , level , flags );
1410
1443
}
1411
1444
@@ -1487,6 +1520,12 @@ int json_object_array_add(struct json_object *jso, struct json_object *val)
1487
1520
return array_list_add (JC_ARRAY (jso )-> c_array , val );
1488
1521
}
1489
1522
1523
+ int json_object_array_insert_idx (struct json_object * jso , size_t idx , struct json_object * val )
1524
+ {
1525
+ assert (json_object_get_type (jso ) == json_type_array );
1526
+ return array_list_insert_idx (JC_ARRAY (jso )-> c_array , idx , val );
1527
+ }
1528
+
1490
1529
int json_object_array_put_idx (struct json_object * jso , size_t idx , struct json_object * val )
1491
1530
{
1492
1531
assert (json_object_get_type (jso ) == json_type_array );
0 commit comments