【问题标题】:how to get boost json to use the correct data types如何让 boost json 使用正确的数据类型
【发布时间】:2015-05-28 09:58:04
【问题描述】:

当我 put_value 使用 int 时,它会被写为字符串。有谁知道如何让它打印为 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;
}

【问题讨论】:

  • 只有 int main()int main(int argc, char * argv[]) 符合标准。
  • @NeilKirk 你为什么评论这个?
  • @sehe 因为他的 main 不符合标准?
  • @NeilKirk 这显然无关紧要。如果您担心它会分散注意力,请考虑 editing。现在你只是在忽略和贬低一个恰当的、合适的问题。
  • @NeilKirk 这就是我使用编辑评论的目的。随便吧。是噪音。

标签: c++ json boost boost-propertytree


【解决方案1】:

该库明确不支持它。

Boost 属性库尚未命名为“Boost Json 库”,因为它不是 JSON 库。相反,它是一个属性树库(恰好使用 JSON 子集来实现它的目的)。

来自documentation

属性树数据集没有类型,不支持数组。因此,使用了以下 JSON / 属性树映射:

  • JSON 对象映射到节点。每个属性都是一个子节点。
  • JSON 数组映射到节点。每个元素都是一个名称为空的子节点。如果一个节点同时具有命名和未命名的子节点,则它不能映射到 JSON 表示。
  • JSON 值映射到包含该值的节点。 但是,所有类型信息都会丢失;数字,以及文字“null”、“true”和“false”都简单地映射到它们的字符串形式。
  • 无法映射同时包含子节点和数据的属性树节点。

JSON 往返,类型信息丢失除外。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-05
    • 1970-01-01
    • 2011-04-16
    • 2013-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-19
    相关资源
    最近更新 更多