diff --git a/compiler/cpp/src/generate/t_json_generator.cc b/compiler/cpp/src/generate/t_json_generator.cc
index cbf3883..1cb8584 100644
--- a/compiler/cpp/src/generate/t_json_generator.cc
+++ b/compiler/cpp/src/generate/t_json_generator.cc
@@ -85,12 +85,19 @@
   std::stack<bool> comma_needed_;
 
   template <typename T>
-  string to_string(T t) {
+  string number_to_string(T t) {
     std::ostringstream out;
+    out.imbue(std::locale::classic());
+    out.precision(std::numeric_limits<T>::digits10);
     out << t;
     return out.str();
   }
 
+  template <typename T>
+  void write_number(T n) {
+    f_json_ << number_to_string(n);
+  }
+
   string get_type_name(t_type* ttype);
   string get_qualified_name(t_type* ttype);
 
@@ -110,8 +117,6 @@
   void write_type_spec_object(const char* name, t_type* ttype);
   void write_type_spec(t_type* ttype);
   void write_string(const string& value);
-  void write_integer(long value);
-  void write_double(double value);
   void write_value(t_type* tvalue);
   void write_const_value(t_const_value* value, bool force_string = false);
   void write_key_and(string key);
@@ -199,7 +204,7 @@
 
 void t_json_generator::write_key_and_integer(string key, int val) {
   write_comma_if_needed();
-  indent(f_json_) << json_str(key) << ": " << to_string(val);
+  indent(f_json_) << json_str(key) << ": " << number_to_string(val);
   indicate_comma_needed();
 }
 
@@ -435,14 +440,6 @@
   f_json_ << quot << escape_json_string(value) << quot;
 }
 
-void t_json_generator::write_integer(long value) {
-  f_json_ << to_string(value);
-}
-
-void t_json_generator::write_double(double value) {
-  f_json_ << to_string(value);
-}
-
 void t_json_generator::write_const_value(t_const_value* value, bool should_force_string) {
 
   switch (value->get_type()) {
@@ -450,17 +447,17 @@
   case t_const_value::CV_IDENTIFIER:
   case t_const_value::CV_INTEGER:
     if (should_force_string) {
-      write_string(to_string(value->get_integer()));
+      write_string(number_to_string(value->get_integer()));
     } else {
-      write_integer(value->get_integer());
+      write_number(value->get_integer());
     }
     break;
 
   case t_const_value::CV_DOUBLE:
     if (should_force_string) {
-      write_string(to_string(value->get_double()));
+      write_string(number_to_string(value->get_double()));
     } else {
-      write_double(value->get_double());
+      write_number(value->get_double());
     }
     break;
 
@@ -474,6 +471,7 @@
     std::vector<t_const_value*>::iterator lit;
     for (lit = list.begin(); lit != list.end(); ++lit) {
       write_comma_if_needed();
+      f_json_ << indent();
       write_const_value(*lit);
       indicate_comma_needed();
     }
@@ -487,6 +485,7 @@
     std::map<t_const_value*, t_const_value*>::iterator mit;
     for (mit = map.begin(); mit != map.end(); ++mit) {
       write_comma_if_needed();
+      f_json_ << indent();
       // JSON objects only allow string keys
       write_const_value(mit->first, FORCE_STRING);
       f_json_ << ": ";
