Skip to content

Commit 3a04fa2

Browse files
committed
handles sub-objects, missing arrays
1 parent 34973b3 commit 3a04fa2

1 file changed

Lines changed: 12 additions & 4 deletions

File tree

src/json_to_cpp.cpp

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)