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 }