@@ -97,7 +97,10 @@ defmodule Jason.Encode do
97
97
end
98
98
99
99
def value ( value , escape , encode_map ) when is_map ( value ) do
100
- encode_map . ( value , escape , encode_map )
100
+ case Map . to_list ( value ) do
101
+ [ ] -> "{}"
102
+ keyword -> encode_map . ( keyword , escape , encode_map )
103
+ end
101
104
end
102
105
103
106
def value ( value , escape , encode_map ) do
@@ -151,17 +154,17 @@ defmodule Jason.Encode do
151
154
end
152
155
153
156
@ spec keyword ( keyword , opts ) :: iodata
154
- def keyword ( list , { escape , encode_map } ) do
157
+ def keyword ( list , _ ) when list == [ ] , do: "{}"
158
+ def keyword ( list , { escape , encode_map } ) when is_list ( list ) do
155
159
encode_map . ( list , escape , encode_map )
156
160
end
157
161
158
162
@ spec map ( map , opts ) :: iodata
159
163
def map ( value , { escape , encode_map } ) do
160
- encode_map . ( value , escape , encode_map )
161
- end
162
-
163
- defp map_naive ( [ ] , _escape , _encode_map ) do
164
- "{}"
164
+ case Map . to_list ( value ) do
165
+ [ ] -> "{}"
166
+ keyword -> encode_map . ( keyword , escape , encode_map )
167
+ end
165
168
end
166
169
167
170
defp map_naive ( [ { key , value } | tail ] , escape , encode_map ) do
@@ -170,12 +173,6 @@ defmodule Jason.Encode do
170
173
| map_naive_loop ( tail , escape , encode_map ) ]
171
174
end
172
175
173
- defp map_naive ( value , escape , encode_map ) do
174
- value
175
- |> Map . to_list
176
- |> map_naive ( escape , encode_map )
177
- end
178
-
179
176
defp map_naive_loop ( [ ] , _escape , _encode_map ) do
180
177
'}'
181
178
end
@@ -186,10 +183,6 @@ defmodule Jason.Encode do
186
183
| map_naive_loop ( tail , escape , encode_map ) ]
187
184
end
188
185
189
- defp map_strict ( [ ] , _escape , _encode_map ) do
190
- "{}"
191
- end
192
-
193
186
defp map_strict ( [ { key , value } | tail ] , escape , encode_map ) do
194
187
key = IO . iodata_to_binary ( key ( key , escape ) )
195
188
visited = % { key => [ ] }
@@ -198,12 +191,6 @@ defmodule Jason.Encode do
198
191
| map_strict_loop ( tail , escape , encode_map , visited ) ]
199
192
end
200
193
201
- defp map_strict ( value , escape , encode_map ) do
202
- value
203
- |> Map . to_list
204
- |> map_strict ( escape , encode_map )
205
- end
206
-
207
194
defp map_strict_loop ( [ ] , _encode_map , _escape , _visited ) do
208
195
'}'
209
196
end
0 commit comments