json parse

https://github.com/nlohmann/json

<1>

展开json

#include <json.hpp>

using json = nlohmann::json;

int main()
{
    // create JSON value
    json j_flattened =
            {
                    {"/answer/everything", 42},
                    {"/happy", true},
                    {"/list/0", 1},
                    {"/list/1", 0},
                    {"/list/2", 2},
                    {"/name", "Niels"},
                    {"/nothing", nullptr},
                    {"/object/test0", "maya"},
                    {"/object/test1", "houdini"},
                    {"/pi", 3.141}
            };

    // call unflatten()
    std::cout << std::setw(4) << j_flattened.unflatten() << ‘\n‘;
}

./out >> test.txt 展开如下。

{
    "answer": {
        "everything": 42
    },
    "happy": true,
    "list": [
        1,
        0,
        2
    ],
    "name": "Niels",
    "nothing": null,
    "object": {
        "test0": "maya",
        "test1": "houdini"
    },
    "pi": 3.141
}

<2>JSON Array 操作:

#include <json.hpp>

using json = nlohmann::json;

int main()
{
    // create JSON arrays
    json j_no_init_list = json::array();
    json j_empty_init_list = json::array({});
    json j_nonempty_init_list = json::array({1, 2, 3, 4});
    json j_list_of_pairs = json::array({ {"one", 1}, {"two", 2} });

    // serialize the JSON arrays
    std::cout << j_no_init_list << ‘\n‘;
    std::cout << j_empty_init_list << ‘\n‘;
    std::cout << j_nonempty_init_list << ‘\n‘;
    std::cout << j_list_of_pairs << ‘\n‘;
}

./out >> test.txt

[]
[]
[1,2,3,4]
[["one",1],["two",2]]

<3> change value use _json_pointer or change array value use slice

_json_pointer前面必须是以linux / 符号才能改变值

当然at()也能返回值,如果作为返回就为const类型输出。

#include <json.hpp>

using json = nlohmann::json;

int main()
{
    // create a JSON value
    json j =
            {
                    {"number", 1},
                    {"string", "foo"},
                    {"array", {1, 2}}
            };

    // read-only access
    std::cout << j.dump(4) <<std::endl;  // print all as 4 spaces

    // output element with JSON pointer "/number"
    std::cout << j.at("/number"_json_pointer) << ‘\n‘;
    // output element with JSON pointer "/string"
    std::cout << j.at("/string"_json_pointer) << ‘\n‘;
    // output element with JSON pointer "/array"
    std::cout << j.at("/array"_json_pointer) << ‘\n‘;
    // output element with JSON pointer "/array/1"
    std::cout << j.at("/array/1"_json_pointer) << ‘\n‘;

    // writing access

    // change the string
    j.at("/string"_json_pointer) = "bar";
    // output the changed string
    std::cout << j["string"] << ‘\n‘;

    // change an array element
    j.at("/array/0"_json_pointer) = 21;
    j.at("/array/1"_json_pointer) = 31;
    // output the changed array
    std::cout << j["array"] << ‘\n‘;   // print out all
    std::cout << j["array"][0] << ‘\n‘; //print first element
    std::cout << j["array"][1] << ‘\n‘; //print secend element

    // change value direct slice get
    j["array"][0]  = 11;
    std::cout << j["array"] << ‘\n‘;   // print out all
}

./out >> text.txt

{    "array": [
        1,
        2
    ],
    "number": 1,
    "string": "foo"
}
1
"foo"
[1,2]
2
"bar"
[21,31]
21
31
[11,31]

<4>不用_json_pointer来改变,仅仅使用at(),如果用修改补存在的key-value,则会抛出异常

#include <json.hpp>

using json = nlohmann::json;

int main()
{
    // create JSON object
    json object =
            {
                    {"the good", "il buono"},
                    {"the bad", "il cattivo"},
                    {"the ugly", "il brutto"},
                    {"array",{1,2,3,4,5}}
            };

    // output element with key "the ugly"
    std::cout << object.at("the ugly") << ‘\n‘;

    // change element with key "the bad"
    object.at("the bad") = "il cattivo";
    object.at("array")[0] = 1000;
    object.at("/array"_json_pointer)[1] = 2000;   //如果使用/ ,才能用_json_pointer
    // output changed array
    std::cout << object << ‘\n‘;

    // try to write at a nonexisting key
    try
    {
        object.at("the fast") = "il rapido";
    }
    catch (std::out_of_range& e)   //修改不存在的值抛出异常
    {
        std::cout << "out of range: " << e.what() << ‘\n‘;
    }
}

./out >> test.txt

"il brutto"{"array":[1000,2000,3,4,5],"the bad":"il cattivo","the good":"il buono","the ugly":"il brutto"}
out of range: key ‘the fast‘ not found

<5>at()按照取标号来改变值,或者取值

#include <json.hpp>

using json = nlohmann::json;

int main()
{
    // create JSON array
    json array = {"first", "2nd", "third", "fourth"};

    // output element at index 2 (third element)
    std::cout << array.at(2) << ‘\n‘;

    // change element at index 1 (second element) to "second"
    array.at(1) = "second";

    // output changed array
    std::cout << array << ‘\n‘;

    // try to write beyond the array limit
    try
    {
        array.at(5) = "sixth";
    }
    catch (std::out_of_range& e)
    {
        std::cout << "out of range: " << e.what() << ‘\n‘;
    }
}

./out >> test.txt

"third"
["first","second","third","fourth"]
out of range: array index 5 is out of range

<6>

时间: 2024-10-13 11:57:28

json parse的相关文章

JSON.parse()和eval()的区别

json格式非常受欢迎,而解析json的方式通常用JSON.parse()但是eval()方法也可以解析,这两者之间有什么区别呢? JSON.parse()之可以解析json格式的数据,并且会对要解析的字符串进行格式检查,如果格式不正确则不进行解析,而eval()则可以解析任何字符串,eval是不安全的. 比如下面的字符串: var str = 'alert(1000.toString())'; eval(str); JSON.parse(str); 用eval可以解析,并且会弹出对话框,而用J

JSON.parse()和JSON.stringify()

JSON.parse(): 把json格式的字符 解析成json对象. 例如: var str = '{'a':1, 'b': 2}';  JSON.parse(str ) 结果为: Object:  {a:1 , b:2} JSON.stringify() : 把一个对象解析成字符串. 例如: var a = {a:1,b:2}  JSON.stringify(a) //结果为  '{'a':1,'b':2}' 应用:可以使用这两种方法,处理cookie等数据,转化成对象易于读取,字符串用于存

js中json处理总结之JSON.parse

踩过的坑都将成为路上的风景.队友在cookie中已存以下值: address_info {"address_name":"人民大会堂","...lng":1,"address_lat":1} 仔细观摩,并无发现任何不妥,只是一种简简单单的json格式字符串而已. 但在前台调用时,百试不爽,屡屡出错,错误代码如下,一直显示undefined var address_info = getCookie('address_info')

浅谈JSON.parse()、JSON.stringify()和eval()的作用

相信大家对于JSON应该不陌生,度娘对这个名词的解释大致如下: “JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于ECMAScript的一个子集.因为采用独立于语言的文本格式,也使用了类似于C语言家族的习惯,拥有了这些特性使JSON成为理想的数据交换语言,作用是易于人阅读和编写,同时也易于机器解析和生成(一般用于提升网络传输速率).” 今天在这里笔者想简单谈谈jquery里面的JSON.parse()和JSON.stringify()函数,顺便

json.stringfy()和json.parse()

json.stringfy()将对象.数组转换成json:json.parse()将json转成对象. json.stringfy(): 语法:  JSON.stringify(value [, replacer] [, space]) value:是必选字段.就是你输入的对象,比如数组,类等. replacer:这个是可选的.它又分为2种方式,一种是数组,第二种是方法. 情况一:replacer为数组时,通过后面的实验可以知道,它是和第一个参数value有关系的.一般来说,系列化后的结果是通过

JSON.parse和eval的区别

JSON(JavaScript Object Notation)是一种轻量级的数据格式,采用完全独立于语言的文本格式,是理想的数据交换格式.同时,JSON是Javascript原生格式,这意味着在javascript中处理JSON数据不需要任何特殊的API或工具包,而且效率非常高. 基本格式:varjsonData='{"data1":"Hello,","data2":"world!"}' 调用方法jsonData.data1

JSON.parse() 和 JSON.stringify()使用

1.parse()是用于从一个字符串中解析出json对象 定义一个字符串:var str = '{"name":"superman","age":"23"}'; 通过JSON.parse(str)后变成一个对象: 取值可以用JSON.parse(str).name 或者 JSON.parse(str)["age"] 注意:单引号写在{}外,每个属性名都必须用双引号,否则会抛出异常. 2.stringify(

eval()和JSON.parse()的区别

我们将一个字符串解析成json对象时可以使用两种方法: 假设我们有一个json格式的字符串: '{ "student" : [ {"name":"鸣人","age":17}, {"name":"小樱","age":17}, {"name":"佐助","age":17} ] }' 然后我们需要把它解析成json

JSON.parse和eval的区别(转)

这几天刚好看到这里,记下来 JSON(JavaScript Object Notation)是一种轻量级的数据格式,采用完全独立于语言的文本格式,是理想的数据交换格式.同时,JSON是Javascript原生格式,这意味着在javascript中处理JSON数据不需要任何特殊的API或工具包,而且效率非常高. 基本格式:varjsonData='{"data1":"Hello,","data2":"world!"}' 调用方法

JSON.parse()和JSON.stringify() 用法

parse 从字符串解析出json对象: var data = '{"a":1,"b":2}'; JSON.parse(data); 返回Object a:1 b:2 _proto_:Object stringify从json对象解析出字符串: var data = {a:1,b:2} JSON.stringify(data) 返回: '{"a":"1","b":"2"}' JSON.p