{"intMap":["4":500,"0":100,"1":200,"2":300,"3":400]}
The above json is declared invalid by several json validators. ZZZZZZZZZZZZZZZZZZZZZZ It is generated by the jtest.proto: syntax = "proto3"; package jtest; message Jmap { map<int32, int32> int_map = 2; } ZZZZZZZZZZZZZZZZZZZZZZZ make_json.cpp : #include <getopt.h> #include <chrono> #include <iostream> #include <fstream> #include <memory> #include <random> #include <string> #include <thread> #include <google/protobuf/text_format.h> #include <grpc/grpc.h> #include <grpc++/channel.h> #include <grpc++/client_context.h> #include <grpc++/create_channel.h> #include <grpc++/security/credentials.h> #include "netopt/proto/json2string.h" #include "jtest.grpc.pb.h" using grpc::Channel; using grpc::ClientContext; using grpc::ClientReader; using grpc::ClientReaderWriter; using grpc::ClientWriter; using grpc::Status; using jtest::Jmap; using ::google::protobuf::Map; using ::google::protobuf::int32; typedef ::google::protobuf::Map< ::google::protobuf::int32, ::google::protobuf::int32 > IntMap; typedef ::google::protobuf::MapPair< ::google::protobuf::int32, ::google::protobuf::int32 > IntPair; #define MAP_COUNT 5 Jmap MakeJmap() { Jmap m; IntMap* map_p =m.mutable_int_map(); for(int i = 0; i < MAP_COUNT; i++) { IntPair pair1(i, (i + 1)*100 ); map_p->insert(pair1); } return m; } int main(int argc, char** argv) { std::string m_file_name = "jmap.json"; std::string a_file_name = "array.json"; Jmap j = MakeJmap(); google::protobuf::util::Json2String j2s; google::protobuf::util::JsonOptions jo; // jo.add_whitespace = true; jo.always_print_primitive_fields = true; std::ofstream m_doc(m_file_name); if(!m_doc.is_open()) { GM_COUT << "Could not open " << m_file_name << ", EXITING!!!" << std::endl; return 1; } std::string m_line = j2s.ToJson(j, jo); if(m_line.empty()) { GM_COUT << "Could not print to string, EXITING!!!" << std::endl; return 1; } m_doc << m_line; m_doc.close(); return 0; } ZZZZZZZZZZZZZZZZZZZZ where json2string.h is: #include <google/protobuf/util/json_util.h> #include <list> #include <string> #include <google/protobuf/io/zero_copy_stream.h> #include <google/protobuf/util/type_resolver.h> #include <google/protobuf/util/type_resolver_util.h> #include "common/gen_headers/macros.h" #include "common/gen_headers/typedefs.h" namespace google { namespace protobuf { namespace util { static const char kTypeUrlPrefix[] = "type.googleapis.com"; static string GetTypeUrl(const Descriptor* message) { return string(kTypeUrlPrefix) + "/" + message->full_name(); } // As functions defined in json_util.h are just thin wrappers around the // JSON conversion code in //net/proto2/util/converter, in this test we // only cover some very basic cases to make sure the wrappers have forwarded // parameters to the underlying implementation correctly. More detailed // tests are contained in the //net/proto2/util/converter directory. class Json2String { public: Json2String() { resolver_.reset(NewTypeResolverForDescriptorPool(kTypeUrlPrefix, DescriptorPool::generated_pool())); } string ToJson(const Message& message, const JsonOptions& options) { string result; Status status = BinaryToJsonString(resolver_.get(), GetTypeUrl(message.GetDescriptor()), message.SerializeAsString(), &result, options); if(!status.ok()) { GM_COUT << status.ToString() << std::endl; } return result; } bool FromJson(const string& json, Message* message) { string binary; util::Status status = JsonToBinaryString(resolver_.get(), GetTypeUrl(message->GetDescriptor()), json, &binary); if(!status.ok()) { GM_COUT << status.ToString() << std::endl; return false; } return message->ParseFromString(binary); } google::protobuf::scoped_ptr<TypeResolver> resolver_; }; } // namespace util } // namespace protobuf } // namespace google -- You received this message because you are subscribed to the Google Groups "Protocol Buffers" group. To unsubscribe from this group and stop receiving emails from it, send an email to protobuf+unsubscr...@googlegroups.com. To post to this group, send email to protobuf@googlegroups.com. Visit this group at https://groups.google.com/group/protobuf. For more options, visit https://groups.google.com/d/optout.