Difference between revisions of "IoTGateway/AdvJSON"

From ESS-WIKI
Jump to: navigation, search
(Indicator)
(Indicator)
Line 140: Line 140:
 
==Operation==
 
==Operation==
 
===Indicator===
 
===Indicator===
Using Array operator to access the JSON tree.
+
Using Array operator to access the JSON tree.<br>
 
<big>'''Example:'''</big>
 
<big>'''Example:'''</big>
 
  movie[“format”][“type”]
 
  movie[“format”][“type”]

Revision as of 05:25, 24 February 2016

What is JSON?

  • JSON stands for JavaScript Object Notation
  • JSON is a lightweight data-interchange format
  • JSON is language independent
  • JSON is "self-describing" and easy to understand

C functions

List

int JSON_Validator(const char *json);

Description

  • This function validates a string in JSON format.

Parameters

  • json [POINTER]
    • a string.

Return Values

  • [0|1] Error or Success.




JSONode *JSON_Parser(const char *json);

Description

  • Translate a string into a tree structure pointer(JSONode);

Parameters

  • json [POINTER]
    • a string.

Return Values

  • (JSONode *)
    • A pointer describes a JSON tree structure.




void JSON_Destory(JSONode **json);

Description

  • Destory a JSON tree sturcture;

Parameters

  • json [POINTER]
    • double-pointer of JSON tree sturcture.

Return Values

  • None




JSONode *JSON_Copy(JSONode *json);

Description

  • Copy a JSON tree sturcture into another pointer.

Parameters

  • json [POINTER]
    • source pointer

Return Values

  • (JSONode *)
    • result pointer




void JSON_Get(JSONode *json, const char *path, char *result, int size);

Description

  • A Structured-Path-Query function.

Parameters

  • json [POINTER]
    • source.
  • path [POINTER]
    • a structure-path string
  • result [POINTER]
    • result string
  • size [NUMBER]
    • the size of result.

Return Values

  • None

Example

char result[256];
JSON_Get(json, "[a][b][c][d]", result, 256);
JSON_Get(json, "/a/b/c/d", result, 256);




void JSON_Cmd(JSONode *json, const char *path, char *assign, int size);

Description

  • A Command-line-like function.

Parameters

  • json [POINTER]
    • source.
  • path [POINTER]
    • a command string
  • assign[POINTER]
    • target
  • size [NUMBER]
    • the size of target.

Return Values

  • None

Example

JSON_Cmd(json, "New [a][b][c][d]", "123", 3);
JSON_Cmd(json, "POST /a/b/c/d", "123", 3);

C++

Fundamental

  • Read only

name = movie[“name”].String();

movie[“name”] = “After Tomorrow”; //Error, Read only

  • Edit

movie.Edit()[“name”] = “After Tomorrow”; //Edit 'Value'

movie.Edit()[“name”] << “Name”; //Edit 'Key'

movie.Edit()[“Year”] = 2004; //Error, Can't create new element

  • New

movie.New()[“Year”] = 2004; //Create a new element

  • Erase

movie[“Year”].Erase();

  • Delete

movie[“Year”].Delete();

Erase & Delete

Example:
AdvJSON json("{}");
json.New()["number"] = {1,2,3,4,5,6,7,8,9,10};
result:

{"number":[1,2,3,4,5,6,7,8,9,10]}
  • Erase

json["number"][5].Erase();
result:

{"number":[1,2,3,4,5,null,7,8,9,10]}
  • Delete

json["number"][3].Delete();
result:

{"number":[1,2,3,5,null,7,8,9,10]}

Operation

Indicator

Using Array operator to access the JSON tree.
Example:

movie[“format”][“type”]
movie[“format”][“frame rate”][0]

Array

Example:

movie.Edit()[“format”][“frame rate”] = {8,16,32};
movie.New()[“format”][“frame rate”] += {64,128,256};
movie.New()[“format”][“resolution”] = { {720,480}, {1920,1080}, {4096,2160} };

Parallel

[{ , , , }] = { , , , }
Example:
AdvJSON movie("{}");

movie.New()[{"name",           "width", "height", "frame rate"}] =
            {"Jurassic World", 1920,    1080,     {15, 25, 30}};

Result:

{
    "name":       "Jurassic World",
    "width":      1920,
    "height":     1080,
    "frame rate": {15, 25, 30}
}

Creator

C[ { , , , } ]( { , , , } )
Example:

AdvJSON movie("{}");
movie.New()[{"name",           "width", "height", "frame rate"}] =
            {"Jurassic World", 1920,    1080,     {15, 25, 30}};
movie.New()["info"] = C[{"video","audio"}]({{"H264","6000"} , {"AAC", "14400"}});

Result:

{
    "name":       "Jurassic World",
    "width":      1920,
    "height":     1080,
    "frame rate": {15, 25, 30}
    "info": {
        "video": ["H264","6000"],
        "audio": ["AAC", "14400"]
    }
}

Example

AdvJSON iot("{}");
AdvJSONCreator C(iot);								
iot.New()["IoTGW"]["WSN"]["WSN0"][{"Info","bn","ver"}] = {
    C[{"e","bn"}]({
        {
            C[{"n","sv","asm"}]({"SenHubList","0000000EC6F0F830,0000000EC6F0F831","r"}),
            C[{"n","sv","asm"}]({"Neighbor","0000000EC6F0F830","r"}),
            C[{"n","v","asm"}]({"Health",80,"r"}),
            C[{"n","sv","asm"}]({"Name","WSN0","r"}),
            C[{"n","sv","asm"}]({"sw","1.0.0.1","r"}),
            C[{"n","bv","asm"}]({"reset",0,"rw"}),
        },
        "Info"
    }),
    "0000852CF4B7B0E8",
    1
};

Result:

{
    "IoTGW": {
        "WSN: {
            "WSN0": {
                "Info": {
                    "e": [
                        { "n": "SenHubList", "sv": "0000000EC6F0F830,0000000EC6F0F831", "asm": "r"},
                        { "n": "Neighbor",   "sv": "0000000EC6F0F830",                  "asm": "r"},
                        { "n": "Health",     "v": 80,                                   "asm": "r"},
                        { "n": "Name",       "sv": "WSN0",                              "asm": "r"},
                        { "n": "sw",         "sv": "1.0.0.1",                           "asm": "r"},
                        { "n": "reset",      "bv": 0,                                   "asm": "rw"},
                    ],
                    "bn": "Info"
                },
                "bn": "0000852CF4B7B0E8",
                "ver": 1
            }
        }
    }
}