Skip to content

Instantly share code, notes, and snippets.

@mloskot
Created December 22, 2011 11:11
Show Gist options
  • Star 28 You must be signed in to star a gist
  • Fork 7 You must be signed in to fork a gist
  • Save mloskot/1509935 to your computer and use it in GitHub Desktop.
Save mloskot/1509935 to your computer and use it in GitHub Desktop.
Simple example of parsing and consuming JSON array with boost::property_tree
#ifdef _MSC_VER
#include <boost/config/compiler/visualc.hpp>
#endif
#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/json_parser.hpp>
#include <boost/foreach.hpp>
#include <cassert>
#include <exception>
#include <iostream>
#include <sstream>
#include <string>
int main()
{
try
{
std::stringstream ss;
ss << "{ \"root\": { \"values\": [1, 2, 3, 4, 5 ] } }";
boost::property_tree::ptree pt;
boost::property_tree::read_json(ss, pt);
BOOST_FOREACH(boost::property_tree::ptree::value_type &v, pt.get_child("root.values"))
{
assert(v.first.empty()); // array elements have no names
std::cout << v.second.data() << std::endl;
}
return EXIT_SUCCESS;
}
catch (std::exception const& e)
{
std::cerr << e.what() << std::endl;
}
return EXIT_FAILURE;
}
@santoshkamblecpp
Copy link

santoshkamblecpp commented Oct 9, 2020

Can you show the way to generate this format { "root": { "values": [1, 2, 3, 4, 5 ] } }
using same boost tree json library. ?

Because boost tree json , converts number/values to string forms. So I wanted to know how we can generate above json.

@mloskot
Copy link
Author

mloskot commented Oct 9, 2020

@santoshkamblecpp The https://www.boost.org/doc/libs/1_74_0/doc/html/property_tree/parsers.html says

JSON values are mapped to nodes containing the value. However, all type information is lost; numbers, as well as the literals "null", "true" and "false" are simply mapped to their string form.

Thus, write your own serialising function (or search the StackOverflow) or use different library (e.g. https://github.com/boostorg/json)

@santoshkamblecpp
Copy link

@santoshkamblecpp The https://www.boost.org/doc/libs/1_74_0/doc/html/property_tree/parsers.html says

JSON values are mapped to nodes containing the value. However, all type information is lost; numbers, as well as the literals "null", "true" and "false" are simply mapped to their string form.

Thus, write your own serialising function (or search the StackOverflow) or use different library (e.g. https://github.com/boostorg/json)

Thank you!

@iamfahad43
Copy link

Hi there,
I am searching 1.instrument_name, 2.bids, 3.asks from json below:

{"jsonrpc":"2.0","method":"subscription","params":{"channel":"book.BTC-PERPETUAL.raw","data":{"type":"change","timestamp":1635513739435,"prev_change_id":6807100702,"instrument_name":"BTC-PERPETUAL","change_id":6807100703,"bids":[["new",60772.0,50.0]],"asks":[]}}}

have there any iteration for these three fields?
like I am still confusing because I use your example code.

Thanks in advance.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment