Q:

how to get boost json to use the correct data types

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;
}

A:

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.