17
17
;
18
18
; -
19
19
;
20
- function pretty_serialize ,value,tagname=tagname,arrayIdentifier=arrayIdentifier
21
- common json_serialize_gdl_level, level, types
20
+ function pretty_serialize ,value,tagname=tagname,flat=flat
21
+ common json_serialize_gdl_level, level
22
22
COMPILE_OPT idl2, HIDDEN
23
23
ON_ERROR ,2
24
24
; ; CATCH, Error_status
@@ -32,12 +32,21 @@ if (n_elements(level) eq 0) then begin
32
32
endif
33
33
space=''
34
34
for i=0 ,level do space+ =' '
35
- braceright=string (10B )+ space+ '}'
36
- XXright=string (10B )+ space+ ']'
37
- braceleft='{' + string (10B )
38
- XXleft='[' + string (10B )
39
- comma=',' + string (10B )
40
- arrayIdentifier=keyword_set (arrayIdentifier)
35
+ if keyword_set (flat) then begin
36
+ braceright='}'
37
+ SquareBraceright=']'
38
+ braceleft='{'
39
+ SquareBraceleft='['
40
+ comma=','
41
+ endif else begin
42
+ braceright=string (10B )+ space+ '}'
43
+ SquareBraceright=string (10B )+ space+ ']'
44
+ braceleft='{' + string (10B )
45
+ SquareBraceleft='[' + string (10B )
46
+ comma=',' + string (10B )
47
+ endelse
48
+
49
+
41
50
ret=size (value)
42
51
ndim=ret[0 ]
43
52
type=ret[ndim+ 1 ]
@@ -56,30 +65,30 @@ endif else tmpstr=''
56
65
case type of
57
66
8 : begin
58
67
tagn=tag_names (value)
59
- tmpstr+ =braceleft & level++
60
- for j=0 ,n_tags (value)- 1 do begin
61
- tmpstr+ =pretty_serialize(tagname=tagn[j],value.(j),/ arrayIdentifier)
62
- if j lt n_tags (value)- 1 then tmpstr+ =comma
68
+ tmpstr+ =braceleft & level++
69
+ for j=0 ,n_tags (value)- 1 do begin
70
+ tmpstr+ =pretty_serialize(tagname=tagn[j],value.(j), / flat)
71
+ if j lt n_tags (value)- 1 then tmpstr+ =comma
72
+ endfor
73
+ tmpstr+ =braceright & level--
63
74
end
64
- tmpstr+ =braceright & level--
65
- end
66
75
67
76
11 : begin ; more tricky depending on single value of array
68
77
mytype=typename (value)
69
78
if (mytype eq 'LIST' ) then begin
70
- tmpstr+ =XXleft & level++
79
+ tmpstr+ =SquareBraceleft & level++
71
80
nn=value.Count()
72
81
for j=0 ,nn- 1 do begin
73
82
tmpstr+ =pretty_serialize(value[j])
74
83
if (j lt nn- 1 ) then tmpstr+ =comma
75
84
endfor
76
- tmpstr+ =XXright & level --
85
+ tmpstr+ =SquareBraceright & level --
77
86
endif else begin
78
87
tmpstr+ =braceleft & level++
79
88
nn=value.Count()
80
89
keys=value.Keys()
81
90
for j=0 ,nn- 1 do begin
82
- tmpstr+ =pretty_serialize(tagname=keys[j],value[keys[j]])
91
+ tmpstr+ =pretty_serialize(tagname=keys[j],value[keys[j]], / flat )
83
92
if (j lt nn- 1 ) then tmpstr+ =comma
84
93
endfor
85
94
tmpstr+ =braceright & level--
@@ -98,36 +107,36 @@ endif else tmpstr=''
98
107
99
108
100
109
endif else begin
101
- if (arrayIdentifier) then tmpstr + = "["
102
- nel= n_elements (value)
110
+ nel= n_elements (value)
111
+ if nel gt 1 then tmpstr + = '['
103
112
for i=0 ,nel- 1 do begin
104
113
case type of
105
114
8 : begin
106
115
tagn=tag_names (value[i])
107
- tmpstr+ ='{'
116
+ tmpstr+ =braceleft & level ++
108
117
for j=0 ,n_tags (value[i])- 1 do begin
109
- tmpstr+ =pretty_serialize(tagname=tagn[j],value[i].(j),/ arrayIdentifier )
118
+ tmpstr+ =pretty_serialize(tagname=tagn[j],value[i].(j),/ flat )
110
119
if (j lt n_tags (value[i])- 1 ) then tmpstr+ =comma
111
120
end
112
- tmpstr+ ='}'
121
+ tmpstr+ =braceright & level --
113
122
end
114
123
115
124
11 : begin ; more tricky depending on single value of array
116
125
mytype=typename (value[i])
117
126
if (mytype eq 'LIST' ) then begin
118
- tmpstr+ ='['
127
+ tmpstr+ =SquareBraceleft & level ++
119
128
nn=value[i].Count()
120
129
for j=0 ,nn- 1 do begin
121
130
tmpstr+ =pretty_serialize((value[i])[j])
122
131
if (j lt nn- 1 ) then tmpstr+ =comma
123
132
endfor
124
- tmpstr+ =']'
133
+ tmpstr+ =SquareBraceright & level --
125
134
endif else begin
126
135
tmpstr+ =braceleft & level++
127
136
nn=value[i].Count()
128
137
keys=value[i].Keys()
129
138
for j=0 ,nn- 1 do begin
130
- tmpstr+ =pretty_serialize(tagname=keys[j],(value[i])[keys[j]])
139
+ tmpstr+ =pretty_serialize(tagname=keys[j],(value[i])[keys[j]], / flat )
131
140
if (j lt nn- 1 ) then tmpstr+ =comma
132
141
endfor
133
142
tmpstr+ =braceright & level--
@@ -142,9 +151,9 @@ endif else tmpstr=''
142
151
0 : tmpstr+ ="!NULL"
143
152
ELSE : tmpstr+ =strtrim (string (value[i]),2 )
144
153
endcase
145
- if (i lt nel- 1 ) then tmpstr+ =', '
154
+ if (i lt nel- 1 ) then tmpstr+ =(comma + space)
146
155
endfor
147
- if (arrayIdentifier) then tmpstr+ ="]"
156
+ if nel gt 1 then tmpstr+ =']'
148
157
endelse
149
158
return ,tmpstr
150
159
end
@@ -176,11 +185,12 @@ if (count gt 0) then begin
176
185
ndim=ret[0 ]
177
186
type=ret[ndim+ 1 ]
178
187
n=n_elements (value)
188
+ n_firstdim=ret[1 ]
179
189
case type of ; define special formats
180
- 4 : begin & w=16 & n=fix (width/ w,/ print ) & fmt=start+ strtrim (n,2 )+ fmtflt & break &end
181
- 5 : begin & w=25 & n=fix (width/ w,/ print ) & fmt=start+ strtrim (n,2 )+ fmtdbl & break &end
182
- 6 : begin & w=35 & n=fix (width/ w,/ print ) & fmt=start+ strtrim (n,2 )+ fmtcplx & break &end
183
- 9 : begin & w=53 & n=fix (width/ w,/ print ) & fmt=start+ strtrim (n,2 )+ fmtcplxdbl & break &end
190
+ 4 : begin & w=16 & n=fix (width/ w,/ print ) & if n_firstdim lt n then n=n_firstdim & fmt=start+ strtrim (n,2 )+ fmtflt & break &end
191
+ 5 : begin & w=25 & n=fix (width/ w,/ print ) & if n_firstdim lt n then n=n_firstdim & fmt=start+ strtrim (n,2 )+ fmtdbl & break &end
192
+ 6 : begin & w=35 & n=fix (width/ w,/ print ) & if n_firstdim lt n then n=n_firstdim & fmt=start+ strtrim (n,2 )+ fmtcplx & break &end
193
+ 9 : begin & w=53 & n=fix (width/ w,/ print ) & if n_firstdim lt n then n=n_firstdim & fmt=start+ strtrim (n,2 )+ fmtcplxdbl & break &end
184
194
ELSE : begin & printf ,out,value & return & end ; just print and return
185
195
endcase
186
196
; only special formats left
@@ -194,6 +204,8 @@ if (count gt 0) then begin
194
204
endif
195
205
196
206
text =pretty_serialize(value)
207
+
197
208
printf ,out,text
209
+
198
210
end
199
211
0 commit comments