为什么boost :: property_tree :: write_json()将整数值转换为字符串?不正确

时间:2018-08-15 10:47:07

标签: c++ json boost

我的输入:data.txt

{
        "target_url":"www.19lou.com/forum-1637-thread-10031471311655793-1-1.html",
        "trespassing_field":{
            "ratetype":5,
            "spider":{
                "prod_name":"name",
                "link_src":1 
            }
        }
}

使用代码:

boost::property_tree::ptree json_tree;
boost::property_tree::read_json("data.txt", json_tree);
std::stringstream json_main_pack;
boost::property_tree::write_json(json_main_pack, json_tree);
LOG(NOTICE) << "json: " << json_main_pack.str();

输出:

{
    "target_url": "www.19lou.com\/forum-1637-thread-10031471311655793-1-1.html",
    "trespassing_field": {
        "ratetype": "5",
        "spider": {
            "prod_name": "name",
            "link_src": "1"
        }
    }
}

write_json()将整数值转换为字符串。它将"ratetype":5转换为"ratetype": "5"。这是不正确的。 如何精确转换?输入整数值,然后输出整数值。

1 个答案:

答案 0 :(得分:2)

从Boost.PropertyTree文档here中看来,所有类型信息都丢失了。相关报价:

  

JSON值映射到包含该值的节点。但是,所有类型的信息都会丢失;数字以及文字“ null”,“ true”和“ false”仅映射到其字符串形式。

强调我的。不幸的是,如果您想保留类型信息,则可能需要使用其他JSON解析器。