CombineHarvester
JsonTools.cc
Go to the documentation of this file.
2 
3 #include <fstream>
4 #include <string>
5 #include "boost/algorithm/string.hpp"
6 
7 namespace ch {
8 Json::Value ExtractJsonFromFile(std::string const& file) {
9  Json::Value js;
10  Json::Reader json_reader;
11  std::fstream input;
12  input.open(file);
13  json_reader.parse(input, js);
14  return js;
15 }
16 
17 Json::Value ExtractJsonFromString(std::string const& str) {
18  Json::Value js;
19  Json::Reader reader(Json::Features::all());
20  reader.parse(str, js);
21  return js;
22 }
23 
24 void UpdateJson(Json::Value& a, Json::Value const& b) {
25  if (!a.isObject() || !b.isObject()) return;
26  for (auto const& key : b.getMemberNames()) {
27  if (a[key].isObject()) {
28  UpdateJson(a[key], b[key]);
29  } else {
30  a[key] = b[key];
31  }
32  }
33 }
34 
35 Json::Value MergedJson(int argc, char* argv[]) {
36  Json::Value res(Json::objectValue);
37  if (argc >= 1) {
38  for (int i = 1; i < argc; ++i) {
39  if (boost::algorithm::iends_with(argv[i], ".json")) {
40  Json::Value val = ExtractJsonFromFile(argv[i]);
41  UpdateJson(res, val);
42  } else {
43  Json::Value val = ExtractJsonFromString(argv[i]);
44  UpdateJson(res, val);
45  }
46  }
47  }
48  return res;
49 }
50 
51 Json::Value MergedJson(std::vector<std::string> const& vec) {
52  Json::Value res(Json::objectValue);
53  for (auto const& str : vec) {
54  if (boost::algorithm::iends_with(str, ".json")) {
55  Json::Value val = ExtractJsonFromFile(str);
56  UpdateJson(res, val);
57  } else {
58  Json::Value val = ExtractJsonFromString(str);
59  UpdateJson(res, val);
60  }
61  }
62  return res;
63 }
64 }
Definition: Algorithm.h:10
Json::Value ExtractJsonFromString(std::string const &str)
Extracts a Json::Value from the given input string.
Definition: JsonTools.cc:17
void UpdateJson(Json::Value &a, Json::Value const &b)
Updates the values in one json from the values in another.
Definition: JsonTools.cc:24
Json::Value MergedJson(int argc, char *argv[])
Create a single merged Json::Value from a mixture of json files and json-formatted strings.
Definition: JsonTools.cc:35
Json::Value ExtractJsonFromFile(std::string const &file)
Extracts a Json::Value from the specified input file.
Definition: JsonTools.cc:8