| Bsoft 2.0.5 Bernard's software package

json.cpp
Go to the documentation of this file.
1
8 #include "json.h"
9
10 ostream& operator<<(ostream& output, JStype t) {
11 switch ( t ) {
12 case JSstring: cout << "JSstring"; break;
13 case JSbool: cout << "JSbool"; break;
14 case JSinteger: cout << "JSinteger"; break;
15 case JSreal: cout << "JSreal"; break;
16 case JSobject: cout << "JSobject"; break;
17 case JSarray: cout << "JSarray"; break;
18 case JSnull: cout << "JSnull"; break;
19 default: cout << "undefined";
20 }
21 return output;
22 }
23
24 int indent(0);
25
26 void indent_line(ostream& output) {
27 for ( int i=0; i<indent; ++i ) output << "\t";
28 }
29
30 ostream& operator<<(ostream& output, JSvalue& jsv) {
31 // cout << "***** " << jsv.type() << " *****" << endl;
32 if ( jsv.type() == JSstring ) {
33 output << "\"" << jsv.value() << "\"";
34 } else if ( jsv.type() == JSbool ) {
35 output << ((jsv.boolean())? "true": "false");
36 } else if ( jsv.type() == JSinteger ) {
37 output << jsv.integer();
38 } else if ( jsv.type() == JSreal ) {
39 output << jsv.real();
40 } else if ( jsv.type() == JSobject ) {
41 output << "{";
42 if ( jsv.size() ) output << endl;
43 indent++;
44 for ( auto it=jsv.object_begin(); it!=jsv.object_end(); ++it ) {
45 if ( it != jsv.object_begin() ) output << ", " << endl;
46 indent_line(output);
47 output << "\"" << it->first << "\": " << it->second;
48 }
49 indent--;
50 if ( jsv.size() ) {
51 output << endl;
52 indent_line(output);
53 }
54 output << "}";
55 } else if ( jsv.type() == JSarray ) {
56 output << "[";
57 if ( jsv.size() > 1 ) {
58 output << endl;
59 indent++;
60 indent_line(output);
61 }
62 for ( auto it=jsv.begin(); it!=jsv.end(); ++it ) {
63 if ( it != jsv.begin() ) output << ", ";
64 output << *it;
65 }
66 if ( jsv.size() > 1 ) {
67 output << endl;
68 indent--;
69 indent_line(output);
70 }
71 output << "]";
72 } else if ( jsv.type() == JSnull ) {
73 output << "null";
74 }
75 return output;
76 }
77
78
79
80
81
JSvalue::object_begin
map< string, JSvalue >::iterator object_begin()
Definition: json.h:224
JSvalue::integer
long & integer()
Definition: json.h:136
JSstring
Definition: json.h:22
indent
int indent(0)
JSvalue::object_end
map< string, JSvalue >::iterator object_end()
Definition: json.h:225
JSinteger
Definition: json.h:24
JSvalue::real
double & real()
Definition: json.h:143
JSvalue::type
const JStype & type() const
Definition: json.h:106
JSvalue::boolean
bool & boolean()
Definition: json.h:132
json.h
JSbool
Definition: json.h:23
JStype
JStype
Definition: json.h:21
JSobject
Definition: json.h:26
JSvalue
Definition: json.h:53
JSvalue::end
vector< JSvalue >::iterator end()
Definition: json.h:182
JSreal
Definition: json.h:25
JSvalue::begin
vector< JSvalue >::iterator begin()
Definition: json.h:181
indent_line
void indent_line(ostream &output)
Definition: json.cpp:26
JSarray
Definition: json.h:27
JSvalue::value
string & value()
Definition: json.h:128
JSvalue::size
size_t size()
Definition: json.h:108
JSnull
Definition: json.h:28
operator<<
ostream & operator<<(ostream &output, JStype t)
Definition: json.cpp:10