Mercurial Hosting > luan
comparison src/luan/lib/json/JsonToString.java @ 1115:809d74db1415
add json_pretty_string
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Thu, 03 Aug 2017 16:57:50 -0600 |
parents | 22652f4020fb |
children | 633ca24d4d6e |
comparison
equal
deleted
inserted
replaced
1114:540e1940170f | 1115:809d74db1415 |
---|---|
105 toString((String)key,sb); | 105 toString((String)key,sb); |
106 sb.append(':'); | 106 sb.append(':'); |
107 toString(entry.getValue(),sb); | 107 toString(entry.getValue(),sb); |
108 } | 108 } |
109 | 109 |
110 | |
111 public static String toPrettyString(Object obj) throws JsonException { | |
112 StringBuilder sb = new StringBuilder(); | |
113 toString(obj,sb,0); | |
114 sb.append('\n'); | |
115 return sb.toString(); | |
116 } | |
117 | |
118 private static void toString(Object obj,StringBuilder sb,int indented) throws JsonException { | |
119 if( obj instanceof List ) { | |
120 toString((List)obj,sb,indented); | |
121 return; | |
122 } | |
123 if( obj instanceof Map ) { | |
124 toString((Map)obj,sb,indented); | |
125 return; | |
126 } | |
127 toString(obj,sb); | |
128 } | |
129 | |
130 private static void indent(StringBuilder sb,int indented) { | |
131 sb.append('\n'); | |
132 for( int i=0; i<indented; i++ ) { | |
133 sb.append('\t'); | |
134 } | |
135 } | |
136 | |
137 private static void toString(List list,StringBuilder sb,int indented) { | |
138 if( list.isEmpty() ) { | |
139 sb.append("{}"); | |
140 return; | |
141 } | |
142 sb.append('['); | |
143 indent(sb,indented+1); | |
144 toString(list.get(0),sb,indented+1); | |
145 for( int i=1; i<list.size(); i++ ) { | |
146 sb.append(','); | |
147 indent(sb,indented+1); | |
148 toString(list.get(i),sb,indented+1); | |
149 } | |
150 indent(sb,indented); | |
151 sb.append(']'); | |
152 return; | |
153 } | |
154 | |
155 private static void toString(Map map,StringBuilder sb,int indented) throws JsonException { | |
156 sb.append('{'); | |
157 Iterator<Map.Entry> i = map.entrySet().iterator(); | |
158 indent(sb,indented+1); | |
159 toString(i.next(),sb,indented+1); | |
160 while( i.hasNext() ) { | |
161 sb.append(','); | |
162 indent(sb,indented+1); | |
163 toString(i.next(),sb,indented+1); | |
164 } | |
165 indent(sb,indented); | |
166 sb.append('}'); | |
167 } | |
168 | |
169 private static void toString(Map.Entry entry,StringBuilder sb,int indented) throws JsonException { | |
170 Object key = entry.getKey(); | |
171 if( !(key instanceof String) ) | |
172 throw new JsonException("table keys must be strings"); | |
173 toString((String)key,sb); | |
174 sb.append(": "); | |
175 toString(entry.getValue(),sb,indented); | |
176 } | |
177 | |
178 | |
179 private JsonToString() {} // never | |
110 } | 180 } |