PropertyTree's JSON support is not typed - data() always returns a string.
The PTree that you get from parsing your JSON should consist of a root node that has one unnamed child for every array element. Each of these children has four named children for the values. The code to iterate it should be:
namespace bpt = boost::property_tree;
bpt::ptree pt;
bpt::read_json(ss, pt);
std::vector<int> players;
int pid;
BOOST_FOREACH(bpt::value_type& v, pt) { // iterate over immediate children of the root
pid = v.second.get<int>("pid"); // use the converting path getter
players.push_back(pid);
}