1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355
|
* Version 4.7.3 (Nov 27, 2022)
- Fix a regression introduced in 4.7.1 where (json->RECORD) was not working
with nested fields.
* Version 4.7.2 (Jun 26, 2022)
- Fix breaking change introduced in 4.7.1 and properly allow optional nested
records in other records.
(Closes #78, again)
* Version 4.7.1 (Apr 19, 2022)
- Allow optional nested records in other records. Not defined record fields
will be set to *unspecified* as any other value.
(Closes #78)
* Version 4.7.0 (Jan 2, 2022)
- Allow returning ordered JSON objects key/value pairs by using the keyword
argument #:ordered.
(Closes #77)
* Version 4.6.0 (Dec 28, 2021)
- Add support for Concatenated JSON.
(Closes #76)
- Add support for JSON Text Sequences.
(thanks to Ivan Sokolov)
* Version 4.5.2 (Feb 3, 2021)
- Add missing modules to record.scm.
* Version 4.5.1 (Jan 11, 2020)
- Allow false values in JSON mappings.
(Fixes #70)
* Version 4.5.0 (Jan 3, 2020)
- Introduce (define-json-type) a much simpler way to define JSON objects and
record mappings. It makes use of the existing (define-json-mapping).
* Version 4.4.1 (Nov 29, 2020)
- Fixed a few parsing issues from JSON Parsing Test Suite
(https://github.com/nst/JSONTestSuite).
(Fixes #67)
* Version 4.4.0 (Oct 22, 2020)
- Record-JSON mapping now can define another optional procedure record->scm
to convert a record to an alist.
(Fixes #63)
- Record-JSON mapping now allows using *unspecified* values to indicate a
field record should not be serialized.
(Fixes #61)
- Improve pretty printing.
(thanks to Jonas Schürmann)
* Version 4.3.2 (Jul 23, 2020)
- Fix unicode for values from E000 and upwards.
(thanks again to pkill9 and RhodiumToad from #guile)
* Version 4.3.1 (Jul 22, 2020)
- Fix unicode codepoint with surrogate pairs.
(thanks to pkill9 and RhodiumToad from #guile)
* Version 4.3.0 (Jul 3, 2020)
- Make RECORD->JSON optional in (define-json-mapping).
* Version 4.2.0 (Jun 30, 2020)
- Introduce (define-json-mapping) which allows converting a JSON object into
a record type and vice versa. The initial code for this feature was copied
from the GNU Guix project.
* Version 4.1.0 (Jun 6, 2020)
- Speed up number parsing by a 2x factor by avoiding using textual ports.
- Simplify unicode string builder.
- Improve string builder performance by not going back and forth with lists,
strings and characters.
* Version 4.0.1 (May 17, 2020)
- (scm->json-string) #:validate keyword argument should default to true as
stated in the documentation.
* Version 4.0.0 (May 16, 2020)
Breaking changes:
- (scm->json) and (scm->json-string) #:espace keyword argument has been
renamed to #:solidus.
- JSON null now defaults to the null symbol. This can be changed in all
public functions with the #:null keyword argument.
Bug fixes and improvements:
- Fix parsing of invalid numbers (e.g. "-").
- Go back to using (cond) instead of (match) since (match) reduces
performance.
- The json-parser record type has been removed as the record only contained
the port. Removing the need to access records also had a slight
performance increase.
- Use a plain list to read strings which brings significant speed
improvements.
- Replace `display` with `put-string` on JSON builder.
- Don't use map to parse expected string, simply use (string-ref).
(thanks to Linus Björnstam)
- Build array list with (cons) and (reverse). Big performance increase.
(suggested by Linus Björnstam)
- Check (eof-object?) last instead of first. This avoids unnecessary checks
which is the regular use-case.
(suggested by Linus Björnstam)
- Use string ports to parse numbers.
(suggested by Linus Björnstam)
- Don't need to use character-sets to detect whitespaces. JSON only defines
four possible types of whitespaces: space, linefeed, carriage return and
horizontal tab.
(suggested by Linus Björnstam)
* Version 3.5.0 (Apr 21, 2020)
- Simplify parser by using `match`. Idea taken from Chickadee's JSON parser
(https://dthompson.us/projects/chickadee.html). This also made it easier
to clean up some functions.
- Better handling of invalid numbers.
- Improve handling of EOF. Most parsing functions were not taking care of
it.
- Fix error when parsing objects with commas and no following elements are
found.
* Version 3.4.0 (Apr 11, 2020)
- Fix parsing 0 with an exponent.
(Fixes #55)
- Fix cross compilation.
(thanks to Jan Nieuwenhuizen)
* Version 3.3.0 (Oct 31, 2019)
- When building a JSON document from a native value a json-invalid exception
will be thrown with the offending value as an argument.
- Add an additional key argument #:validate to (scm->json) and
(scm->json-string) to avoid native value validation. This could improve
performance with big native values that we are certain are correct.
- Empty array slots are now considered invalid and a json-invalid exception
will be thrown (e.g. "[1,2,,4,5]").
- Validate scheme objects before writing output.
(Fixes #36)
* Version 3.2.0 (Sep 9, 2019)
- Fix writing empty objects to JSON (e.g. (scm->json-string '())).
(Fixes #44 and #47)
- Complex numbers, inf and nan are not allowed anymore as valid numbers when
building JSON.
(Fixes #32)
* Version 3.1.0 (Dec 31, 2018)
- scm->json and scm->json-string now support an additional key argument
#:unicode. If #:unicode is set to true unicode characters will be escaped
when needed, otherwise characters won't be escaped (which now becomes the
default).
* Version 3.0.0 (Dec 29, 2018)
- This is another breaking change release.
- JSON objects are now defined as alists (instead of hash tables) and JSON
arrays are now defined as vectors (instead of lists). Both of these
changes are mainly to use types that have read syntax. This will simplify
things for the user when defining JSON objects which is probably the most
common case.
- Fixed and issue when parsing only JSON numbers.
- Added unit tests.
* Version 2.0.0 (Dec 12, 2018)
- This is a breaking change release. It is not possible anymore to specify a
JSON object using alists. Instead alist->hash-table needs to be explicitly
used. This makes the bidirectional mapping between Guile hash-tables and
JSON objects consistent.
* Version 1.3.2 (Dec 2, 2018)
- Don't use GUILE_SITE and GUILE_SITE_CCACHE, build them as before. Print a
helper message at the end of configure output to help users to install in
Guile system's directory.
* Version 1.3.1 (Dec 1, 2018)
- Fix guile.m4 to allow multiple candidates for guild, guile-config and
guile-tools.
- Use GUILE_SITE as the variable instead of GUILE_SITE_DIR.
(Fixes #20)
* Version 1.3.0 (Nov 28, 2018)
- Properly use guile.m4 macros to install to the right paths.
(thanks to Jason Douglas Earl)
* Version 1.2.0 (Aug 22, 2018)
- Switch to GPLv3.
* Version 1.1.1 (Aug 14, 2018)
- Don't output extra spaces except with pretty printing.
* Version 1.1.0 (Jul 26, 2018)
- Install .go files to $(libdir)/guile.
(thanks to Ludovic Courtès)
* Version 1.0.1 (May 24, 2018)
- Fixes an issue while handling alists with #nil at the beginning.
* Version 1.0.0 (May 23, 2018)
- Support 4-byte unicode characters.
(thanks to Christopher Lam)
- Remove deprecated `json` macro.
- Dual GPLv3 and LGPLv3 license.
* Version 0.6.0 (Jan 16, 2017)
- Deprecate json macro in favor of scheme data types.
* Version 0.5.0 (Feb 21, 2015)
- Allow converting simple alists to json
e.g.: (scm->json-string '((a . 1) (b . 2))))
(thanks to Jan Nieuwenhuizen)
* Version 0.4.0 (Aug 17, 2014)
- Add unquote-splicing support to json form.
(thanks to David Thompson)
* Version 0.3.1 (Jul 6, 2013)
- Use pure sh script syntax in env.in.
(thanks to Andrew Gaylard)
* Version 0.3.0 (May 13, 2013)
- Re-licensed under LGPLv3.
- Use new guile.m4 macro.
- Convert rationals to floats to comply with JSON spec.
(closes github #3, patch from Doug Woos)
* Version 0.2.0 (Apr 2, 2013)
- Improve parser errors by providing an additional parser argument to
the json-invalid exception.
* Version 0.1.3 (Feb 10, 2013)
- Automatically update pkg-list.scm version.
* Version 0.1.2 (Feb 7, 2013)
- Fix pretty printing.
- Use (display) instead of (simple-format) when possible.
* Version 0.1.1 (Feb 2, 2013)
- Use (car)/(cdr) instead of (drop-right)/(last). This should be more
efficient.
* Version 0.1.0 (Jan 30, 2013)
Initial release.
|