void write_json_helper(std::basic_ostream<typename Ptree::key_type::value_type> &stream, const Ptree &pt, int indent, bool pretty) { typedef typename Ptree::key_type::value_type Ch; typedef typename std::basic_string<Ch> Str; // Value or object or array if (indent > 0 && pt.empty()) { // Write value Str data = create_escapes(pt.template get_value<Str>()); stream << Ch('"') << data << Ch('"'); } else if (indent > 0 && pt.count(Str()) == pt.size()) { // Write array stream << Ch('['); if (pretty) stream << Ch('\n'); typename Ptree::const_iterator it = pt.begin(); for (; it != pt.end(); ++it) { if (pretty) stream << Str(4 * (indent + 1), Ch(' ')); write_json_helper(stream, it->second, indent + 1, pretty); if (lslboost::next(it) != pt.end()) stream << Ch(','); if (pretty) stream << Ch('\n'); } stream << Str(4 * indent, Ch(' ')) << Ch(']'); } else { // Write object stream << Ch('{'); if (pretty) stream << Ch('\n'); typename Ptree::const_iterator it = pt.begin(); for (; it != pt.end(); ++it) { if (pretty) stream << Str(4 * (indent + 1), Ch(' ')); stream << Ch('"') << create_escapes(it->first) << Ch('"') << Ch(':'); if (pretty) { if (it->second.empty()) stream << Ch(' '); else stream << Ch('\n') << Str(4 * (indent + 1), Ch(' ')); } write_json_helper(stream, it->second, indent + 1, pretty); if (lslboost::next(it) != pt.end()) stream << Ch(','); if (pretty) stream << Ch('\n'); } if (pretty) stream << Str(4 * indent, Ch(' ')); stream << Ch('}'); } }
void write_info_helper(std::basic_ostream<typename Ptree::char_type> &stream, const Ptree &pt, int indent) { // Character type typedef typename Ptree::char_type Ch; // Write data if (indent >= 0) { if (!pt.data().empty()) { std::basic_string<Ch> data = create_escapes(pt.template get_own<std::basic_string<Ch> >()); if (is_simple_data(data)) stream << Ch(' ') << data << Ch('\n'); else stream << Ch(' ') << Ch('\"') << data << Ch('\"') << Ch('\n'); } else if (pt.empty()) stream << Ch(' ') << Ch('\"') << Ch('\"') << Ch('\n'); else stream << Ch('\n'); } // Write keys if (!pt.empty()) { // Open brace if (indent >= 0) stream << std::basic_string<Ch>(4 * indent, Ch(' ')) << Ch('{') << Ch('\n'); // Write keys typename Ptree::const_iterator it = pt.begin(); for (; it != pt.end(); ++it) { // Output key std::basic_string<Ch> key = create_escapes(it->first); stream << std::basic_string<Ch>(4 * (indent + 1), Ch(' ')); if (is_simple_key(key)) stream << key; else stream << Ch('\"') << key << Ch('\"'); // Output data and children write_info_helper(stream, it->second, indent + 1); } // Close brace if (indent >= 0) stream << std::basic_string<Ch>(4 * indent, Ch(' ')) << Ch('}') << Ch('\n'); } }