aboutsummaryrefslogtreecommitdiff
path: root/src/tools/jsontool.cpp
blob: e086fb846d5b78033588bed7b8b1ab998d34e734 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#include <bu/sio.h>
#include <bu/json.h>
#include <bu/file.h>

void printThing( Bu::Json &j, int iDepth=0 )
{
    for(int i = 0; i < iDepth; i++ )
        Bu::print("  ");

    switch( j.getType() )
    {
        case Bu::Json::Invalid:
            Bu::println("<invalid>");
            break;

        case Bu::Json::Object:
            Bu::println("<object>");
            {
                Bu::UtfStringList lKeys = j.getKeys();
                for( Bu::UtfStringList::iterator i = lKeys.begin(); i; i++ )
                {
                    for(int k = 0; k < iDepth+1; k++ )
                        Bu::print("  ");
                    Bu::println("'%1':").arg( *i );
                    printThing( j[*i], iDepth+2 );
                }
            }
            break;

        case Bu::Json::Array:
            Bu::println("<array>");
            for( int i = 0; i < j.getSize(); i++ )
            {
                printThing( j[i], iDepth+1 );
            }
            break;

        case Bu::Json::String:
            Bu::println("'%1'").arg( j.getString() );
            break;

        case Bu::Json::Number:
            Bu::println("%1").arg( j.getNumber() );
            break;

        case Bu::Json::Boolean:
            Bu::println("%1").arg( j.getBoolean() );
            break;

        case Bu::Json::Null:
            Bu::println("<null>");
            break;
    }
}

int main( int argc, char *argv[] )
{
    Bu::Json j;
    j.parse( Bu::File( argv[1], Bu::File::Read ).readAll() );

    printThing( j );

    return 0;
}