Changes in Jansson — Jansson v2.1 documentation

### Navigation

- index
- previous |
- Jansson v2.1 documentation »

# Changes in Jansson

## Version 2.1

Release 2011-06-10

- New features:
  - `json_loadb()`: Decode a string with a given size, useful if the string is not null terminated.
  - Add `JSON_ENCODE_ANY` encoding flag to allow encoding any JSON value. By default, only arrays and objects can be encoded. (#19)
  - Add `JSON_REJECT_DUPLICATES` decoding flag to issue a decoding error if any JSON object in the input contins duplicate keys. (#3)
  - Add `JSON_DISABLE_EOF_CHECK` decoding flag to stop decoding after a valid JSON input. This allows other data after the JSON data.
- Bug fixes:
  - Fix an additional memory leak when memory allocation fails in `json_object_set()` and friends.
  - Clear errno before calling `strtod()` for better portability. (#27)
- Building:
  - Avoid set-but-not-used warning/error in a test. (#20)
- Other:
  - Minor clarifications to documentation.

## Version 2.0.1

Released 2011-03-31

- Bug fixes:
  - Replace a few `malloc()` and `free()` calls with their counterparts that support custom memory management.
  - Fix object key hashing in json_unpack() strict checking mode.
  - Fix the parentheses in `JANSSON_VERSION_HEX` macro.
  - Fix `json_object_size()` return value.
  - Fix a few compilation issues.
- Portability:
  - Enhance portability of `va_copy()`.
  - Test framework portability enhancements.
- Documentation:
  - Distribute `doc/upgrading.rst` with the source tarball.
  - Build documentation in strict mode in `make distcheck`.

## Version 2.0

Released 2011-02-28

This release is backwards incompatible with the 1.x release series. See the chapter “Upgrading from older versions” in documentation for details.

- Backwards incompatible changes:
  - Unify unsigned integer usage in the API: All occurences of unsigned int and unsigned long have been replaced with size_t.
  - Change JSON integer’s underlying type to the widest signed integer type available, i.e. long long if it’s supported, otherwise long. Add a typedef json_int_t that defines the type.
  - Change the maximum indentation depth to 31 spaces in encoder. This frees up bits from the flags parameter of encoding functions `json_dumpf()`, `json_dumps()` and `json_dump_file()`.
  - For future needs, add a flags parameter to all decoding functions `json_loadf()`, `json_loads()` and `json_load_file()`.
- New features
  - `json_pack()`, `json_pack_ex()`, `json_vpack_ex()`: Create JSON values based on a format string.
  - `json_unpack()`, `json_unpack_ex()`, `json_vunpack_ex()`: Simple value extraction and validation functionality based on a format string.
  - Add column, position and source fields to the `json_error_t` struct.
  - Enhance error reporting in the decoder.
  - `JANSSON_VERSION` et al.: Preprocessor constants that define the library version.
  - `json_set_alloc_funcs()`: Set custom memory allocation functions.
- Fix many portability issues, especially on Windows.
- Configuration
  - Add file `jansson_config.h` that contains site specific configuration. It’s created automatically by the configure script, or can be created by hand if the configure script cannot be used. The file `jansson_config.h.win32` can be used without modifications on Windows systems.
  - Add a section to documentation describing how to build Jansson on Windows.
  - Documentation now requires Sphinx 1.0 or newer.

## Version 1.3

Released 2010-06-13

- New functions:
  - `json_object_iter_set()`, `json_object_iter_set_new()`: Change object contents while iterating over it.
  - `json_object_iter_at()`: Return an iterator that points to a specific object item.
- New encoding flags:
  - `JSON_PRESERVE_ORDER`: Preserve the insertion order of object keys.
- Bug fixes:
  - Fix an error that occured when an array or object was first encoded as empty, then populated with some data, and then re-encoded
  - Fix the situation like above, but when the first encoding resulted in an error
- Documentation:
  - Clarify the documentation on reference stealing, providing an example usage pattern

## Version 1.2.1

Released 2010-04-03

- Bug fixes:
  - Fix reference counting on `true`, `false` and `null`
  - Estimate real number underflows in decoder with 0.0 instead of issuing an error
- Portability:
  - Make `int32_t` available on all systems
  - Support compilers that don’t have the `inline` keyword
  - Require Autoconf 2.60 (for `int32_t`)
- Tests:
  - Print test names correctly when `VERBOSE=1`
  - `test/suites/api`: Fail when a test fails
  - Enhance tests for iterators
  - Enhance tests for decoding texts that contain null bytes
- Documentation:
  - Don’t remove `changes.rst` in `make clean`
  - Add a chapter on RFC conformance

## Version 1.2

Released 2010-01-21

- New functions:
  - `json_equal()`: Test whether two JSON values are equal
  - `json_copy()` and `json_deep_copy()`: Make shallow and deep copies of JSON values
  - Add a version of all functions taking a string argument that doesn’t check for valid UTF-8: `json_string_nocheck()`, `json_string_set_nocheck()`, `json_object_set_nocheck()`, `json_object_set_new_nocheck()`
- New encoding flags:
  - `JSON_SORT_KEYS`: Sort objects by key
  - `JSON_ENSURE_ASCII`: Escape all non-ASCII Unicode characters
  - `JSON_COMPACT`: Use a compact representation with all unneeded whitespace stripped
- Bug fixes:
  - Revise and unify whitespace usage in encoder: Add spaces between array and object items, never append newline to output.
  - Remove const qualifier from the `json_t` parameter in `json_string_set()`, `json_integer_set()` and `json_real_set()`.
  - Use `int32_t` internally for representing Unicode code points (int is not enough on all platforms)
- Other changes:
  - Convert `CHANGES` (this file) to reStructured text and add it to HTML documentation
  - The test system has been refactored. Python is no longer required to run the tests.
  - Documentation can now be built by invoking `make html`
  - Support for pkg-config

## Version 1.1.3

Released 2009-12-18

- Encode reals correctly, so that first encoding and then decoding a real always produces the same value
- Don’t export private symbols in `libjansson.so`

## Version 1.1.2

Released 2009-11-08

- Fix a bug where an error message was not produced if the input file could not be opened in `json_load_file()`
- Fix an assertion failure in decoder caused by a minus sign without a digit after it
- Remove an unneeded include of `stdint.h` in `jansson.h`

## Version 1.1.1

Released 2009-10-26

- All documentation files were not distributed with v1.1; build documentation in make distcheck to prevent this in the future
- Fix v1.1 release date in `CHANGES`

## Version 1.1

Released 2009-10-20

- API additions and improvements:
  - Extend array and object APIs
  - Add functions to modify integer, real and string values
  - Improve argument validation
  - Use unsigned int instead of `uint32_t` for encoding flags
- Enhance documentation
  - Add getting started guide and tutorial
  - Fix some typos
  - General clarifications and cleanup
- Check for integer and real overflows and underflows in decoder
- Make singleton values thread-safe (`true`, `false` and `null`)
- Enhance circular reference handling
- Don’t define `-std=c99` in `AM_CFLAGS`
- Add C++ guards to `jansson.h`
- Minor performance and portability improvements
- Expand test coverage

## Version 1.0.4

Released 2009-10-11

- Relax Autoconf version requirement to 2.59
- Make Jansson compile on platforms where plain `char` is unsigned
- Fix API tests for object

## Version 1.0.3

Released 2009-09-14

- Check for integer and real overflows and underflows in decoder
- Use the Python json module for tests, or simplejson if the json module is not found
- Distribute changelog (this file)

## Version 1.0.2

Released 2009-09-08

- Handle EOF correctly in decoder

## Version 1.0.1

Released 2009-09-04

- Fixed broken `json_is_boolean()`

## Version 1.0

Released 2009-08-25

- Initial release

### Navigation

- index
- previous |
- Jansson v2.1 documentation »