… | |
… | |
202 | existing JSON modules could be made to work correctly. First I will |
202 | existing JSON modules could be made to work correctly. First I will |
203 | describe the problems (or pleasures) I encountered with various existing |
203 | describe the problems (or pleasures) I encountered with various existing |
204 | JSON modules, followed by some benchmark values. JSON::XS was designed |
204 | JSON modules, followed by some benchmark values. JSON::XS was designed |
205 | not to suffer from any of these problems or limitations. |
205 | not to suffer from any of these problems or limitations. |
206 | |
206 | |
207 | JSON |
207 | JSON 1.07 |
208 | Slow (but very portable, as it is written in pure Perl). |
208 | Slow (but very portable, as it is written in pure Perl). |
209 | |
209 | |
210 | Undocumented/buggy Unicode handling (how JSON handles unicode values |
210 | Undocumented/buggy Unicode handling (how JSON handles unicode values |
211 | is undocumented. One can get far by feeding it unicode strings and |
211 | is undocumented. One can get far by feeding it unicode strings and |
212 | doing en-/decoding oneself, but unicode escapes are not working |
212 | doing en-/decoding oneself, but unicode escapes are not working |
… | |
… | |
214 | |
214 | |
215 | No roundtripping (strings get clobbered if they look like numbers, |
215 | No roundtripping (strings get clobbered if they look like numbers, |
216 | e.g. the string 2.0 will encode to 2.0 instead of "2.0", and that |
216 | e.g. the string 2.0 will encode to 2.0 instead of "2.0", and that |
217 | will decode into the number 2. |
217 | will decode into the number 2. |
218 | |
218 | |
219 | JSON::PC |
219 | JSON::PC 0.01 |
220 | Very fast. |
220 | Very fast. |
221 | |
221 | |
222 | Undocumented/buggy Unicode handling. |
222 | Undocumented/buggy Unicode handling. |
223 | |
223 | |
224 | No roundtripping. |
224 | No roundtripping. |
… | |
… | |
230 | which is not a valid JSON string. |
230 | which is not a valid JSON string. |
231 | |
231 | |
232 | Unmaintained (maintainer unresponsive for many months, bugs are not |
232 | Unmaintained (maintainer unresponsive for many months, bugs are not |
233 | getting fixed). |
233 | getting fixed). |
234 | |
234 | |
235 | JSON::Syck |
235 | JSON::Syck 0.21 |
236 | Very buggy (often crashes). |
236 | Very buggy (often crashes). |
237 | |
237 | |
238 | Very inflexible (no human-readable format supported, format pretty |
238 | Very inflexible (no human-readable format supported, format pretty |
239 | much undocumented. I need at least a format for easy reading by |
239 | much undocumented. I need at least a format for easy reading by |
240 | humans and a single-line compact format for use in a protocol, and |
240 | humans and a single-line compact format for use in a protocol, and |
… | |
… | |
259 | other using JSON. One bank might parse a given non-JSON request and |
259 | other using JSON. One bank might parse a given non-JSON request and |
260 | deduct money, while the other might reject the transaction with a |
260 | deduct money, while the other might reject the transaction with a |
261 | syntax error. While a good protocol will at least recover, that is |
261 | syntax error. While a good protocol will at least recover, that is |
262 | extra unnecessary work and the transaction will still not succeed). |
262 | extra unnecessary work and the transaction will still not succeed). |
263 | |
263 | |
264 | JSON::DWIW |
264 | JSON::DWIW 0.04 |
265 | Very fast. Very natural. Very nice. |
265 | Very fast. Very natural. Very nice. |
266 | |
266 | |
267 | Undocumented unicode handling (but the best of the pack. Unicode |
267 | Undocumented unicode handling (but the best of the pack. Unicode |
268 | escapes still don't get parsed properly). |
268 | escapes still don't get parsed properly). |
269 | |
269 | |