как заставить json использовать правильные типы данных

Когда я 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;
}

person joels    schedule 24.03.2015    source источник
comment
Только int main() и int main(int argc, char * argv[]) соответствуют стандарту.   -  person Neil Kirk    schedule 25.03.2015
comment
@NeilKirk, почему ты прокомментировал это?   -  person sehe    schedule 25.03.2015
comment
@sehe Потому что его главная не соответствует стандарту?   -  person Neil Kirk    schedule 25.03.2015
comment
@NeilKirk Это явно не имеет значения. Если вы боитесь, что это отвлекает, подумайте об редактировании. Прямо сейчас вы просто игнорируете и отвлекаете от хорошо поставленного, подходящего вопроса.   -  person sehe    schedule 25.03.2015
comment
@sehe Если я просто отредактирую это, он может не понять, почему.   -  person Neil Kirk    schedule 25.03.2015
comment
@NeilKirk Вот для чего я использовал комментарий редактирования. В любом случае. Это шум.   -  person sehe    schedule 25.03.2015


Ответы (1)


Библиотека явно не поддерживает его.

Библиотека свойств Boost не была названа «Библиотека Boost Json», потому что это не библиотека JSON. Вместо этого это библиотека дерева свойств (которая использует подмножества JSON для своих целей).

Из документации. :

Набор данных дерева свойств не типизирован и не поддерживает массивы как таковые. Таким образом, используется следующее сопоставление JSON/дерева свойств:

  • Объекты JSON сопоставляются с узлами. Каждое свойство является дочерним узлом.
  • Массивы JSON сопоставляются с узлами. Каждый элемент является дочерним узлом с пустым именем. Если узел имеет как именованные, так и неименованные дочерние узлы, его нельзя сопоставить с представлением JSON.
  • Значения JSON сопоставляются с узлами, содержащими это значение. Однако вся информация о типах будет потеряна; числа, а также литералы "null", "true" и "false" просто сопоставляются с их строковой формой.
  • Узлы дерева свойств, содержащие как дочерние узлы, так и данные, не могут быть сопоставлены.

И

Круговые обходы JSON, за исключением потери информации о типе.

person sehe    schedule 24.03.2015