|
Boost : |
Subject: Re: [boost] JSON Parser GSoC 2013
From: Michael Marcin (mike.marcin_at_[hidden])
Date: 2013-04-12 11:53:47
Arindam Mukherjee wrote:
> In JSON we typically deal with maps and arrays. The arrays themselves could
> have arbitrary types (string, object, array, numeric, boolean, null) as
> elements. The key types in the maps are always strings and the value types
> in the maps could be anything that can appear in an array, including
> another map or array.
>
> Due to this, I'd imagine being able to use Boost.Variant or Boost.Any in a
> list and as a value_type in a map would help.
>
Probably.
I find the most useful interface is to just provide a datatype you're
expecting and let the json parser try its best to do the right thing.
For example:
string raw_json = R"({
data:{
a:"hello",
b:"world",
c:3,
widget:3.5
}
})";
struct my_type1
{
map<string,string> data;
};
struct my_type2
{
map<string,variant<string,int,double>> data;
};
struct my_type3
{
map<string,any> data;
};
struct my_type4
{
unordered_map<string,string> data;
};
struct my_type5
{
struct my_data
{
string a;
string b;
int c;
float widget;
} data;
};
// these should all just work, with maybe a little bit of
// metaprogramming to describe the types to the json library
json::deserialize<my_type1>( json );
json::deserialize<my_type2>( json );
json::deserialize<my_type3>( json );
json::deserialize<my_type4>( json );
json::deserialize<my_type5>( json );
struct my_type6
{
map<string,int> data;
};
// runtime error can't meaningfully convert
// "hello" to an int
json::deserialize<my_type6>( json );
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk