
Hi, I am trying to add a support for degenerate / corner cases for my JSON parser. First I needed support for malformed null values for object members like that: obj : { "bad_member: , "correct_member: null } I would like the parser to generate same result for both members in that case (null value). I eventually came up with custom semantic action that does the job: struct MakeMember { typedef void result_type; template <class Arg1, class Ctx> result_type operator()(Arg1& arg1, Ctx& ctx, bool& b) const { using namespace boost::fusion; auto m0 = boost::fusion::at_c<0>(arg1); auto m1 = boost::fusion::at_c<1>(arg1); ctx.attributes.car.first = m0; ctx.attributes.car.second = m1 ? *m1 : NullT(); } }; but I have a feeling that is not the best way to do it. I would rally appreciate an advice on that. Secondly I want to add support for empty array members: obj : { "empty_array" : [] } but this time I am totally lost. My array parser looks like this: array = '[' >> value % ',' >> ']'; which is only god for 1 or more element list. I tried array = '[' >> -(value % ',') >> ']'; and altho it compiled it still didn't reckognize "[]' as Array object. Full source code of parser / grammar attched. Regards, Szymon