how to get boost json to use the correct data types

妖精的绣舞 提交于 2019-12-20 02:05:52

问题


When I put_value using an int, it gets written as a string. Does anyone know how to get it to print as an int?

#include <iostream>
#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/json_parser.hpp>

using boost::property_tree::ptree;
using namespace std;

int main(int argc, char* argv[]) {

    ptree node;
    node.put("string", "text here");
    node.put("int", 1);//outputs as "1" and should be 1
    write_json(cout, node, false);//{"string":"text here","int":"1"}

    return 0;
}

回答1:


The library expressly doesn't support it.

Boost Property Library has not been named "Boost Json Library" because it's not a JSON library. Instead, it's a Property Tree library (that happens to use JSON subsets for its purposes).

From the documentation:

The property tree dataset is not typed, and does not support arrays as such. Thus, the following JSON / property tree mapping is used:

  • JSON objects are mapped to nodes. Each property is a child node.
  • JSON arrays are mapped to nodes. Each element is a child node with an empty name. If a node has both named and unnamed child nodes, it cannot be mapped to a JSON representation.
  • JSON values are mapped to nodes containing the value. However, all type information is lost; numbers, as well as the literals "null", "true" and "false" are simply mapped to their string form.
  • Property tree nodes containing both child nodes and data cannot be mapped.

And

JSON round-trips, except for the type information loss.



来源:https://stackoverflow.com/questions/29243662/how-to-get-boost-json-to-use-the-correct-data-types

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!