#include <iostream>
#include <type_traits>
#include <string>
#include <sstream>
#include <algorithm>
#include <iterator>
#include <vector>

struct StringificationOptions
{
    std::string delimiter;
};

#define DEFAULT_OPTIONS {}

template <typename T, template <typename, class = std::allocator <T> > class ContainerT,
          class = typename std::enable_if<std::is_arithmetic<T>::value>::type >
std::string js_stringify(std::string const& name, ContainerT <T> values, StringificationOptions = DEFAULT_OPTIONS)
{
    std::stringstream sstr;
    sstr << '"'
        << name
        << "\":["
    ;
    if (!values.empty())
    {
        auto bte = values.end();
        bte--;
        std::copy(values.begin(), bte, std::ostream_iterator<T>(sstr, ","));
        sstr << values.back();
    }
    sstr << ']';
    return sstr.str();
}

std::string js_stringify(std::string const& name, std::string const& value, StringificationOptions = DEFAULT_OPTIONS, bool as_array = false)
{
    if (as_array)
        return js_stringify(name, std::vector <std::string::value_type> {value.begin(), value.end()});

    std::stringstream sstr;
    sstr << "\""
        << name
        << "\":\""
        << value
        << "\""
    ;
    return sstr.str();
}

int main() {
	std::vector <int> c = {1, 2, 3};
    std::cout << js_stringify("c", c) << "\n";
	return 0;
}