ejson/doc/read.md

110 lines
3.1 KiB
Markdown

Read an JSON content {#ejson_tutorial_read}
===================
@tableofcontents
The first thing to do when reading or writing a JSON file/stream, is to declare the Document interface
Include ejson
@snippet read.cpp ejson_sample_include
Declare document interface
@snippet read.cpp ejson_sample_declare_doc
Read an JSON file {#ejson_tutorial_read_file}
================
File to read: "read.json"
@include read.json
Reading a file is done like this:
@snippet read.cpp ejson_sample_read_file
The file naming is manage by @ref etk::FSNode that provide "DATA:///" start string for internal application asset. You can use external path like "./plop/file.json" too.
Read an JSON Stream {#ejson_tutorial_read_stream}
==================
Reading a stream is done like this:
@snippet read.cpp ejson_sample_read_stream1
In C and C++ it is very hard to read string with the \\" then to simplify parsing of json the parser engine support the use of simple **'** interface:
@snippet read.cpp ejson_sample_read_stream2
Access at all Element datas {#ejson_tutorial_read_folow}
===========================
In an ejson::Object (or ejson::Document) the sub-nodes are accessible threw an abstraction class stores in an element name **Value**
Get a value with its name:
@snippet read.cpp ejson_sample_read_get_element
Access to a string in an Object:
-------------------------------
The generic Way to access to an element is to convert it in the corect type:
@snippet read.cpp ejson_sample_read_convert_string
Commonly you might use like this:
@snippet read.cpp ejson_sample_read_get_string
Access to a boolean in an Object:
---------------------------------
@snippet read.cpp ejson_sample_read_get_boolean
Access to a Number in an Object:
---------------------------------
By default a number is a double (herited from the js internal property)
@snippet read.cpp ejson_sample_read_get_number
But it is possible to read large number directly in 64 bits mode (better for entier number, no round generated.)
@snippet read.cpp ejson_sample_read_get_number_64_bits
Access to a Array in an Object:
---------------------------------
Get the Array
@snippet read.cpp ejson_sample_read_get_array
Move threw all element:
@snippet read.cpp ejson_sample_read_move_threw_array
Move threw all element in C mode:
@snippet read.cpp ejson_sample_read_move_threw_array_c
Access to a Object in an Object:
---------------------------------
Get the Object
@snippet read.cpp ejson_sample_read_get_object
Move threw all element:
@snippet read.cpp ejson_sample_read_move_threw_object
Move threw all element in C mode:
@snippet read.cpp ejson_sample_read_move_threw_object_c
Now we can copy the Object we want
==================================
ejson manage reference object, then it is possible that 2 part of the software access at the same object/element ...
You can copy object to separate or duplicate section.
This is named cloning:
@snippet read.cpp ejson_sample_read_clone
All example file {#ejson_tutorial_read_all}
================
@include read.cpp