【问题标题】:Json data creation for nlohmann为 nlohmann 创建 Json 数据
【发布时间】:2021-03-03 11:20:06
【问题描述】:

我有一些类似的数据

{
"GLOBAL DATA":
    {
    "FIRST": [
                {"BEGIN": "0", "END" : "100"}
             ],
    "SECOND":"SomeData",
    "THIRD":"SomeMoreData"
    }
}

我想向FIRST 数组添加更多数据。 我尝试按如下方式创建插入数据

json v2 = {"BEGIN": "200","END" : "300"};

但这会出错

example1.cpp:34:23: error: expected '}' before ':' token json v2 = {"BEGIN": "200","END" : "300"};

我的v2 数据有什么问题?

【问题讨论】:

    标签: c++ json nlohmann-json


    【解决方案1】:

    您可以将 JSON 数据包装在原始字符串文字中并使用 _json user-defined literal 对其进行解析:

    json v2 = R"({"BEGIN": "200", "END": "300"})"_json;
    

    或者您可以直接(无需解析),但使用有效的 C++ 语法:

    json v2 = {{"BEGIN", "200"}, {"END", "300"}};
    

    【讨论】:

    • 是的,我可以在文档中找到这个。
    • @InQusitive 太棒了! :)
    【解决方案2】:

    分析一下你想做什么:

    这里是:

    {"BEGIN":"0","END":"100","MIDDLE":50}
    

    是层次结构中索引 0 处的对象:

    globalData.first
    

    所以你可以获取数组中索引 0 处的元素并添加一个新的 key:value

    std::string st = "{\"GLOBAL DATA\":{\"FIRST\": [{\"BEGIN\": \"0\", \"END\" : \"100\"}],\"SECOND\":\"SomeData\",\"THIRD\":\"SomeMoreData\"}}";
    nlohmann::json second = nlohmann::json::parse(st);
    second["GLOBAL DATA"]["FIRST"].at(0).push_back({"MIDDLE", 50});
    std::cout << second.dump().c_str();
    

    输出:

    {"GLOBAL DATA":{"FIRST": [{"BEGIN":"0","END":"100","MIDDLE":50}],"SECOND":"SomeData","THIRD":"SomeMoreData"}}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-25
      相关资源
      最近更新 更多