5 https://gitlab.gnome.org/GNOME/json-glib/-/blob/master/json-glib/json-generator.c
7 note - that could probably be fixed by just adding the sort method on members List..
12 public class JsonGen : Object
15 Json.Generator generator;
17 public bool pretty = true;
18 public int indent = 1;
19 public char indent_char = ' ';
20 public JsonGen( Json.Node node )
23 this.generator = new Json.Generator ();
24 this.generator.indent = this.indent;
25 this.generator.pretty = this.pretty;
30 public string to_data()
32 var buffer = new GLib.StringBuilder();
33 dump_node(buffer,0, this.node, "", false);
40 GLib.StringBuilder buffer,
51 for (var i = 0; i < (level * this.indent); i++) {
52 buffer.append_c(this.indent_char);
58 // initiate a node as a string... then output it..
59 //buffer.append_c( '"'); // might not be needed..
60 var k = new Json.Node(Json.NodeType.VALUE);
64 //buffer.append_c( '"');
67 buffer.append( " : ");
69 buffer.append_c( ':');
73 switch (node.get_node_type()) {
74 case Json.NodeType.NULL:
75 buffer.append( "null");
78 case Json.NodeType.VALUE:
80 this.generator.set_root(node);
81 var str = this.generator.to_data(out sl);
85 case Json.NodeType.ARRAY:
86 this.dump_array ( buffer, level, node.get_array());
89 case Json.NodeType.OBJECT:
90 this.dump_object (buffer, level, node.get_object());
95 void dump_value (GLib.StringBuilder buffer, Json.Node node)
98 this.generator.set_root(node);
99 buffer.append( this.generator.to_data(out slen) );
103 GLib.StringBuilder buffer,
109 var array_len = array.get_length();
111 var pretty = this.pretty;
114 buffer.append_c( '[');
116 if (array_len == 0) {
117 buffer.append_c( ']');
121 for (var i = 0; i < array_len; i++) {
122 var cur = array.get_element ( i);
124 if (i == 0 && pretty) {
125 buffer.append_c('\n');
127 this.dump_node ( buffer, level + 1, cur, "", false);
129 if ((i + 1) != array_len) {
130 buffer.append_c( ',');
133 buffer.append_c( '\n');
138 for (var i = 0; i < (level * this.indent); i++) {
139 buffer.append_c(this.indent_char);
143 buffer.append_c( ']');
147 GLib.StringBuilder buffer,
153 var pretty = this.pretty;
157 buffer.append_c('{');
158 buffer.append_c( '\n');
159 var members = object.get_members();
160 members.sort(GLib.strcmp);
163 members.foreach ( (member_name) => {
166 var cur = object.get_member( member_name);
168 //if (mi > 0 && pretty) {
169 // buffer.append_c( '\n');
172 dump_node (buffer, level + 1, cur, member_name, true);
174 if (mi < members.length()-1) {
175 buffer.append_c( ',');
178 buffer.append_c( '\n');
184 for (var i = 0; i < (level * this.indent); i++) {
185 buffer.append_c( this.indent_char);
189 buffer.append_c( '}');
201 valac --pkg json-glib-1.0 -D JSON_TESTCODE Json.vala
205 void main (string[] args) {
208 {"quiz":{"sport":{"q1":{"question":"Which one is correct team name in NBA?","options":["New York Bulls",
209 "Los Angeles Kings","Golden State Warriros","Huston Rocket"],"answer":"Huston Rocket"}},"maths":
210 {"q1":{"question":"5 + 7 = ?","options":["10","11","12","13"],"answer":"12"},"q2":
211 {"question":"12 - 8 = ?","options":["1","2","3","4"],"answer":"4"}}}}
213 var parser = new Json.Parser ();
214 parser.load_from_data(testjson);
216 var node = parser.get_root ();
218 var js = new JsRender.JsonGen(node);
219 print("OUT: %s", js.to_data());