ef95113aba
[SVN r70665]
70 lines
2.1 KiB
Plaintext
70 lines
2.1 KiB
Plaintext
[/
|
|
/ Copyright (c) 2008 Marcin Kalicinski (kalita <at> poczta dot onet dot pl)
|
|
/ Copyright (c) 2009 Sebastian Redl (sebastian dot redl <at> getdesigned dot at)
|
|
/
|
|
/ Distributed under the Boost Software License, Version 1.0. (See accompanying
|
|
/ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
|
/]
|
|
[section JSON Parser]
|
|
[def __json__ [@http://en.wikipedia.org/wiki/JSON JSON format]]
|
|
The __json__ is a data interchange format derived from the object literal
|
|
notation of JavaScript. (JSON stands for JavaScript Object Notation.)
|
|
JSON is a simple, compact format for loosely structured node trees of any depth,
|
|
very similar to the property tree dataset. It is less structured than XML and
|
|
has no schema support, but has the advantage of being simpler, smaller and typed
|
|
without the need for a complex schema.
|
|
|
|
The property tree dataset is not typed, and does not support arrays as such.
|
|
Thus, the following JSON / property tree mapping is used:
|
|
|
|
* JSON objects are mapped to nodes. Each property is a child node.
|
|
* JSON arrays are mapped to nodes. Each element is a child node with an empty
|
|
name. If a node has both named and unnamed child nodes, it cannot be mapped
|
|
to a JSON representation.
|
|
* JSON values are mapped to nodes containing the value. However, all type
|
|
information is lost; numbers, as well as the literals "null", "true" and
|
|
"false" are simply mapped to their string form.
|
|
* Property tree nodes containing both child nodes and data cannot be mapped.
|
|
|
|
JSON round-trips, except for the type information loss.
|
|
|
|
For example this JSON:
|
|
|
|
{
|
|
"menu":
|
|
{
|
|
"foo": true,
|
|
"bar": "true",
|
|
"value": 102.3E+06,
|
|
"popup":
|
|
[
|
|
{"value": "New", "onclick": "CreateNewDoc()"},
|
|
{"value": "Open", "onclick": "OpenDoc()"},
|
|
]
|
|
}
|
|
}
|
|
|
|
will be translated into the following property tree:
|
|
|
|
menu
|
|
{
|
|
foo true
|
|
bar true
|
|
value 102.3E+06
|
|
popup
|
|
{
|
|
""
|
|
{
|
|
value New
|
|
onclick CreateNewDoc()
|
|
}
|
|
""
|
|
{
|
|
value Open
|
|
onclick OpenDoc()
|
|
}
|
|
}
|
|
}
|
|
|
|
[endsect] [/json_parser]
|