次のプログラムで作成した JSON を読みます。
C++ の json11 を使う (Create)
json_read.cpp
// -----------------------------------------------------------------------
/*
json_read.cpp
May/28/2018
*/
// -----------------------------------------------------------------------
#include <iostream>
#include <fstream>
#include <string>
#include <cstring>
#include <map>
#include "json11.hpp"
// -----------------------------------------------------------------------
using namespace std;
using namespace json11;
typedef map<string,string> Unit;
// -----------------------------------------------------------------------
string file_to_str_proc (char file_in[])
{
string chunk = "";
ifstream ifs (file_in);
string buf;
while (ifs && getline (ifs,buf))
{
chunk += buf;
}
return chunk;
}
// -----------------------------------------------------------------------
void dict_display_proc (map <string,Unit> dict_aa)
{
map <string,Unit>:: iterator it = dict_aa.begin ();
while (it != dict_aa.end ())
{
Unit unit_aa = (*it).second;
cout << (*it).first << "\t";
cout << unit_aa["name"] << "\t";
cout << unit_aa["population"] << "\t";
cout << unit_aa["date_mod"] << endl;
it++;
}
}
// -----------------------------------------------------------------------
map <string,Unit> json_to_dict_proc (string str_json)
{
map <string,Unit> dict_aa;
string err;
auto json = Json::parse(str_json, err);
if (!err.empty())
{
printf("Failed: %s\n", err.c_str());
}
else
{
// printf("Result: %s\n", json.dump().c_str());
for (auto &kk : json.object_items())
{
string key = kk.first.c_str();
Unit unit_aa;
for (auto &ll : kk.second.object_items())
{
{
string key_item = ll.first.c_str();
string vvx = ll.second.string_value();
if (vvx.length() == 0)
{
vvx = ll.second.dump().c_str();
}
unit_aa[key_item] = vvx;
}
dict_aa[key] = unit_aa;
}
}
return dict_aa;
}
// -----------------------------------------------------------------------
int main (int argc, char* argv[])
{
cerr << "*** 開始 ***\n";
char file_in[160];
strcpy (file_in,argv[1]);
string str_json = file_to_str_proc (file_in);
map <string,Unit> dict_aa = json_to_dict_proc (str_json);
dict_display_proc (dict_aa);
cerr << "*** 終了 ***\n";
return 0;
}
// -----------------------------------------------------------------------
Makefile
CPLUS_COMMON=/var/www/data_base/common/cplus_common
json_read: json_read.cpp
clang++ -o json_read json_read.cpp -ljson11
clean:
rm -f json_read
実行コマンド
./json_read cities.json