如何将名称中带点的密钥添加到 json 文件
How to add a key with a dot in the name to a json file
我正在看一些资料,我想写在json,但是有些键的名称中包含点号。我想得到这样的东西:
{
"programs":
{
"tmp.exe" : "D:\Directory\Directory",
"foo.exe" : "C:\Directory"
}
}
这是我的代码:
ptree pt;
ptree name;
name.put(string_name,string_directory);
pt.add_child("programs",name);
但结果如下:
{
"programs":
{
"tmp":
{
"exe" : "D:\Directory\Directory"
},
"foo":
{
"exe" : "C:\Directory"
}
}
}
小时候我想把它加进去。但是这段代码根本不起作用
ptree pt;
ptree name;
name.put("",string_name);
pt.add_child("programs",name);
pt.find(string_name).put_value(string_directory);
虽然我测试过的所有 JSON linters 都接受你的目标 JSON 是有效的并且 boost::property_tree::read_json
解析它,但实际上创建它有点麻烦。这是因为 boost::property_tree
默认使用 .
作为路径分隔符。
为了克服这个问题,您可以指定 Key 与指定另一个字符的默认值 ptree::path_type
不同。我在这里使用 \
作为路径分隔符,因为它不太可能成为文件基本名称的一部分。
示例:
#include <boost/property_tree/json_parser.hpp>
#include <boost/property_tree/ptree.hpp>
#include <iostream>
int main() {
using namespace boost::property_tree;
try {
ptree pt;
ptree name;
name.put(ptree::path_type{"tmp.exe", '\'}, "D:\Directory\Directory");
name.put(ptree::path_type{"foo.exe", '\'}, "C:\Directory");
pt.add_child("programs", name);
write_json(std::cout, pt);
} catch(const std::exception& ex) {
std::cout << "exception: " << ex.what() << '\n';
}
}
输出:
{
"programs": {
"tmp.exe": "D:\Directory\Directory",
"foo.exe": "C:\Directory"
}
}
我正在看一些资料,我想写在json,但是有些键的名称中包含点号。我想得到这样的东西:
{
"programs":
{
"tmp.exe" : "D:\Directory\Directory",
"foo.exe" : "C:\Directory"
}
}
这是我的代码:
ptree pt;
ptree name;
name.put(string_name,string_directory);
pt.add_child("programs",name);
但结果如下:
{
"programs":
{
"tmp":
{
"exe" : "D:\Directory\Directory"
},
"foo":
{
"exe" : "C:\Directory"
}
}
}
小时候我想把它加进去。但是这段代码根本不起作用
ptree pt;
ptree name;
name.put("",string_name);
pt.add_child("programs",name);
pt.find(string_name).put_value(string_directory);
虽然我测试过的所有 JSON linters 都接受你的目标 JSON 是有效的并且 boost::property_tree::read_json
解析它,但实际上创建它有点麻烦。这是因为 boost::property_tree
默认使用 .
作为路径分隔符。
为了克服这个问题,您可以指定 Key 与指定另一个字符的默认值 ptree::path_type
不同。我在这里使用 \
作为路径分隔符,因为它不太可能成为文件基本名称的一部分。
示例:
#include <boost/property_tree/json_parser.hpp>
#include <boost/property_tree/ptree.hpp>
#include <iostream>
int main() {
using namespace boost::property_tree;
try {
ptree pt;
ptree name;
name.put(ptree::path_type{"tmp.exe", '\'}, "D:\Directory\Directory");
name.put(ptree::path_type{"foo.exe", '\'}, "C:\Directory");
pt.add_child("programs", name);
write_json(std::cout, pt);
} catch(const std::exception& ex) {
std::cout << "exception: " << ex.what() << '\n';
}
}
输出:
{
"programs": {
"tmp.exe": "D:\Directory\Directory",
"foo.exe": "C:\Directory"
}
}