@@ -86,10 +86,13 @@ namespace daw {
8686
8787 void obj_to_string ( boost::string_view cur_name, daw::json::impl::object_value const & cur_item, std::unordered_map<std::string, obj_info_t > & obj_info ) {
8888 using daw::json::impl::value_t ;
89-
89+
9090 obj_info_t cur_obj;
9191 cur_obj.name = cur_name.to_string ( );
92-
92+ if ( cur_obj.name .empty ( ) ) {
93+ static size_t unknown_count = 0 ;
94+ cur_obj.name = " unknown_" + std::to_string ( unknown_count++ );
95+ }
9396 std::vector<std::string> sub_objects;
9497 std::vector<std::string> sub_arrays;
9598 for ( auto const & member: cur_item.container ( ) ) {
@@ -99,12 +102,17 @@ namespace daw {
99102 cur_obj.members [val_info.name ] = val_info;
100103
101104 if ( val_info.type == value_t ::value_types::object ) {
102- sub_objects. push_back ( val_info.name );
105+ obj_to_string ( val_info.name , member. second . get_object ( ), obj_info );
103106 } else if ( val_info.type == value_t ::value_types::array ) {
104107 sub_arrays.push_back ( val_info.name );
105108 }
109+
110+ }
111+ // This will merge or create
112+ obj_info[cur_obj.name ].name = cur_obj.name ;
113+ for ( auto const & member: cur_obj.members ) {
114+ obj_info[cur_obj.name ].members [member.first ] = member.second ;
106115 }
107- obj_info[cur_obj.name ] = cur_obj;
108116 }
109117
110118 std::unordered_map<std::string, obj_info_t > obj_to_string ( daw::json::impl::value_t const & json_obj ) {
0 commit comments