Browse Source

Rearrange README.md a bit and make it work better in the doxygen generated docs.

Also, add a table of contents, and a brief section on using json-c with links to
the header files most likely to be useful.
tags/json-c-0.13-20171207
Eric Haszlakiewicz 8 years ago
parent
commit
c01635e03e
1 changed files with 74 additions and 45 deletions
  1. +74
    -45
      README.md

+ 74
- 45
README.md View File

@@ -1,19 +1,27 @@
`json-c` {#mainpage} `json-c` {#mainpage}
======== ========


JSON-C - A JSON implementation in C
1. [Overview and Build Status](#overview)
2. [Building on Unix](#buildunix)
3. [Install Prerequisites](#installprereq)
4. [Building with partial threading support](#buildthreaded)
5. [Linking to libjson-c](#linking)
6. [Using json-c](#using)

JSON-C - A JSON implementation in C <a name="overview"></a>
----------------------------------- -----------------------------------


Build Status Build Status
* [![AppVeyor Build Status](https://ci.appveyor.com/api/projects/status/github/json-c/json-c?branch=master&svg=true)](https://ci.appveyor.com/project/hawicz/json-c)
* [![Travis Build Status](https://travis-ci.org/json-c/json-c.svg?branch=master)](https://travis-ci.org/json-c/json-c)
* [AppVeyor Build](https://ci.appveyor.com/project/hawicz/json-c) ![AppVeyor Build Status](https://ci.appveyor.com/api/projects/status/github/json-c/json-c?branch=master&svg=true)
* [Travis Build](https://travis-ci.org/json-c/json-c) ![Travis Build Status](https://travis-ci.org/json-c/json-c.svg?branch=master)


JSON-C implements a reference counting object model that allows you to easily JSON-C implements a reference counting object model that allows you to easily
construct JSON objects in C, output them as JSON formatted strings and parse construct JSON objects in C, output them as JSON formatted strings and parse
JSON formatted strings back into the C representation of JSON objects. JSON formatted strings back into the C representation of JSON objects.
It aims to conform to [RFC 7159](https://tools.ietf.org/html/rfc7159). It aims to conform to [RFC 7159](https://tools.ietf.org/html/rfc7159).


Building on Unix with `git`, `gcc` and `autotools`

Building on Unix with `git`, `gcc` and `autotools` <a name="buildunix"></a>
-------------------------------------------------- --------------------------------------------------


Home page for json-c: https://github.com/json-c/json-c/wiki Home page for json-c: https://github.com/json-c/json-c/wiki
@@ -28,10 +36,13 @@ See also the "Installing prerequisites" section below.
If you're not using a release tarball, you'll also need: If you're not using a release tarball, you'll also need:


- `autoconf>=2.64` (`autoreconf`) - `autoconf>=2.64` (`autoreconf`)
- `automake>=1.10.3`
- `automake>=1.13`


Make sure you have a complete `libtool` install, including `libtoolize`. Make sure you have a complete `libtool` install, including `libtoolize`.


To generate docs (e.g. as part of make distcheck) you'll also need:
- `doxygen>=1.8.13`

### Build instructions: ### Build instructions:


`json-c` GitHub repo: https://github.com/json-c/json-c `json-c` GitHub repo: https://github.com/json-c/json-c
@@ -54,48 +65,10 @@ To build and run the test programs:


```sh ```sh
$ make check $ make check
$ make USE_VALGRIND=0 check # optionally skip using valgrind
``` ```


Building with partial threading support
----------------------------------------

Although json-c does not support fully multi-threaded access to
object trees, it has some code to help make use in threaded programs
a bit safer. Currently, this is limited to using atomic operations for
json_object_get() and json_object_put().

Since this may have a performance impact, of at least 3x slower
according to https://stackoverflow.com/a/11609063, it is disabled by
default. You may turn it on by adjusting your configure command with:
--enable-threading

Separately, the default hash function used for object field keys,
lh_char_hash, uses a compare-and-swap operation to ensure the randomly
seed is only generated once. Because this is a one-time operation, it
is always compiled in when the compare-and-swap operation is available.


Linking to `libjson-c`
----------------------

If your system has `pkgconfig`,
then you can just add this to your `makefile`:

```make
CFLAGS += $(shell pkg-config --cflags json-c)
LDFLAGS += $(shell pkg-config --libs json-c)
```

Without `pkgconfig`, you would do something like this:

```make
JSON_C_DIR=/path/to/json_c/install
CFLAGS += -I$(JSON_C_DIR)/include/json-c
LDFLAGS+= -L$(JSON_C_DIR)/lib -ljson-c
```


Install prerequisites
Install prerequisites <a name="installprereq"></a>
----------------------- -----------------------


If you are on a relatively modern system, you'll likely be able to install If you are on a relatively modern system, you'll likely be able to install
@@ -142,3 +115,59 @@ export PATH=${HOME}/ac_install/bin:$PATH
make install) make install)
``` ```



Building with partial threading support <a name="buildthreaded"></a>
----------------------------------------

Although json-c does not support fully multi-threaded access to
object trees, it has some code to help make use in threaded programs
a bit safer. Currently, this is limited to using atomic operations for
json_object_get() and json_object_put().

Since this may have a performance impact, of at least 3x slower
according to https://stackoverflow.com/a/11609063, it is disabled by
default. You may turn it on by adjusting your configure command with:
--enable-threading

Separately, the default hash function used for object field keys,
lh_char_hash, uses a compare-and-swap operation to ensure the randomly
seed is only generated once. Because this is a one-time operation, it
is always compiled in when the compare-and-swap operation is available.


Linking to `libjson-c` <a name="linking">
----------------------

If your system has `pkgconfig`,
then you can just add this to your `makefile`:

```make
CFLAGS += $(shell pkg-config --cflags json-c)
LDFLAGS += $(shell pkg-config --libs json-c)
```

Without `pkgconfig`, you would do something like this:

```make
JSON_C_DIR=/path/to/json_c/install
CFLAGS += -I$(JSON_C_DIR)/include/json-c
LDFLAGS+= -L$(JSON_C_DIR)/lib -ljson-c
```


Using json-c <a name="using">
------------

To use json-c you can either include json.h, or preferrably, one of the
following more specific header files:

* json_object.h - Core types and methods.
* json_tokener.h - Methods for parsing and serializing json-c object trees.
* json_pointer.h - JSON Pointer (RFC 6901) implementation for retrieving
objects from a json-c object tree.
* json_object_iterator.h - Methods for iterating over single json_object instances.
* json_visit.h - Methods for walking a tree of json-c objects.
* json_util.h - Miscelleanous utility functions.

For a full list of headers see [files.html](files.html)


Loading…
Cancel
Save