{"id":2703,"date":"2019-01-16T20:19:24","date_gmt":"2019-01-16T12:19:24","guid":{"rendered":"https:\/\/damogame.cn:15443\/wordpress\/?p=2703"},"modified":"2019-01-16T20:26:00","modified_gmt":"2019-01-16T12:26:00","slug":"c%e7%9a%84json%e8%a7%a3%e6%9e%90%e5%ba%93%ef%bc%9ajsoncpp%e5%92%8cboost","status":"publish","type":"post","link":"https:\/\/i007.cc\/wordpress\/archives\/2703","title":{"rendered":"C++\u7684Json\u89e3\u6790\u5e93\uff1ajsoncpp\u548cboost"},"content":{"rendered":"<div class=\"article-header-box\">\n<div class=\"article-header\">\n<div class=\"article-title-box\"><strong>JSON<\/strong>(JavaScript Object Notation)\u8ddfxml\u4e00\u6837\u4e5f\u662f\u4e00\u79cd\u6570\u636e\u4ea4\u6362\u683c\u5f0f\uff0c\u4e86\u89e3json\u8bf7\u53c2\u8003\u5176\u5b98\u7f51<a href=\"http:\/\/json.org\/\" target=\"_blank\" rel=\"nofollow noopener\">http:\/\/json.org<\/a>\uff0c\u672c\u6587\u4e0d\u518d\u5bf9json\u505a\u4ecb\u7ecd\uff0c\u5c06\u91cd\u70b9\u4ecb\u7ecdc++\u7684json\u89e3\u6790\u5e93\u7684\u4f7f\u7528\u65b9\u6cd5\u3002json\u5b98\u7f51\u4e0a\u5217\u51fa\u4e86\u5404\u79cd\u8bed\u8a00\u5bf9\u5e94\u7684json\u89e3\u6790\u5e93\uff0c\u4f5c\u8005\u4ec5\u4ecb\u7ecd\u81ea\u5df1\u4f7f\u7528\u8fc7\u7684\u4e24\u79cdC++\u7684json\u89e3\u6790\u5e93:jsoncpp(v0.5.0)\u548cBoost(v1.34.0)\u3002<\/div>\n<\/div>\n<\/div>\n<article class=\"baidu_pl\">\n<div id=\"article_content\" class=\"article_content clearfix csdn-tracking-statistics\" data-pid=\"blog\" data-mod=\"popu_307\" data-dsm=\"post\">\n<div id=\"content_views\" class=\"htmledit_views\">\n<h3><a name=\"t0\"><\/a>\u00a0\u4e00. \u4f7f\u7528jsoncpp\u89e3\u6790json<\/h3>\n<p>Jsoncpp\u662f\u4e2a\u8de8\u5e73\u53f0\u7684\u5f00\u6e90\u5e93\uff0c\u9996\u5148\u4ece<a href=\"http:\/\/jsoncpp.sourceforge.net\/\" target=\"_blank\" rel=\"nofollow noopener\">http:\/\/jsoncpp.sourceforge.net\/<\/a>\u4e0a\u4e0b\u8f7djsoncpp\u5e93\u6e90\u7801\uff0c\u6211\u4e0b\u8f7d\u7684\u662fv0.5.0\uff0c\u538b\u7f29\u5305\u5927\u7ea6107K\uff0c\u89e3\u538b\uff0c\u5728jsoncpp-src-0.5.0\/makefiles\/vs71\u76ee\u5f55\u91cc\u627e\u5230jsoncpp.sln\uff0c\u7528VS2003\u53ca\u4ee5\u4e0a\u7248\u672c\u7f16\u8bd1\uff0c\u9ed8\u8ba4\u751f\u6210\u9759\u6001\u94fe\u63a5\u5e93\u3002 \u5728\u5de5\u7a0b\u4e2d\u5f15\u7528\uff0c\u53ea\u9700\u8981include\/json\u53ca.lib\u6587\u4ef6\u5373\u53ef\u3002<\/p>\n<p>\u4f7f\u7528JsonCpp\u524d\u5148\u6765\u719f\u6089\u51e0\u4e2a\u4e3b\u8981\u7684\u7c7b\uff1a<\/p>\n<p>Json::Value \u00a0 \u00a0 \u53ef\u4ee5\u8868\u793a\u91cc\u6240\u6709\u7684\u7c7b\u578b\uff0c\u6bd4\u5982int,string,object,array\u7b49\uff0c\u5177\u4f53\u5e94\u7528\u5c06\u4f1a\u5728\u540e\u8fb9\u793a\u4f8b\u4e2d\u4ecb\u7ecd\u3002<\/p>\n<p>Json::Reader\u00a0\u00a0 \u5c06json\u6587\u4ef6\u6d41\u6216\u5b57\u7b26\u4e32\u89e3\u6790\u5230Json::Value, \u4e3b\u8981\u51fd\u6570\u6709Parse\u3002<\/p>\n<p>Json::Writer \u00a0 \u00a0\u4e0eJson::Reader\u76f8\u53cd\uff0c\u5c06Json::Value\u8f6c\u5316\u6210\u5b57\u7b26\u4e32\u6d41\uff0c\u6ce8\u610f\u5b83\u7684\u4e24\u4e2a\u5b50\u7c7b\uff1aJson::FastWriter\u548cJson::StyleWriter\uff0c\u5206\u522b\u8f93\u51fa\u4e0d\u5e26\u683c\u5f0f\u7684json\u548c\u5e26\u683c\u5f0f\u7684json\u3002<\/p>\n<p>1. \u4ece\u5b57\u7b26\u4e32\u89e3\u6790json<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">int ParseJsonFromString()\r\n{\r\n  const char* str = \"{\\\"uploadid\\\": \\\"UP000000\\\",\\\"code\\\": 100,\\\"msg\\\": \\\"\\\",\\\"files\\\": \\\"\\\"}\";\r\n \r\n  Json::Reader reader;\r\n  Json::Value root;\r\n  if (reader.parse(str, root))  \/\/ reader\u5c06Json\u5b57\u7b26\u4e32\u89e3\u6790\u5230root\uff0croot\u5c06\u5305\u542bJson\u91cc\u6240\u6709\u5b50\u5143\u7d20\r\n  {\r\n    std::string upload_id = root[\"uploadid\"].asString();  \/\/ \u8bbf\u95ee\u8282\u70b9\uff0cupload_id = \"UP000000\"\r\n    int code = root[\"code\"].asInt();    \/\/ \u8bbf\u95ee\u8282\u70b9\uff0ccode = 100\r\n  }\r\n  return 0;\r\n}<\/pre>\n<p>2. \u4ece\u6587\u4ef6\u89e3\u6790json<\/p>\n<p>json\u6587\u4ef6\u5185\u5bb9\uff1a<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">{\r\n    \"uploadid\": \"UP000000\",\r\n    \"code\": \"0\",\r\n    \"msg\": \"\",\r\n    \"files\":\r\n    [\r\n        {\r\n            \"code\": \"0\",\r\n            \"msg\": \"\",\r\n            \"filename\": \"1D_16-35_1.jpg\",\r\n            \"filesize\": \"196690\",\r\n            \"width\": \"1024\",\r\n            \"height\": \"682\",\r\n            \"images\":\r\n            [\r\n                {\r\n                    \"url\": \"fmn061\/20111118\",\r\n                    \"type\": \"large\",\r\n                    \"width\": \"720\",\r\n                    \"height\": \"479\"\r\n                },\r\n                {\r\n                    \"url\": \"fmn061\/20111118\",\r\n                    \"type\": \"main\",\r\n                    \"width\": \"200\",\r\n                    \"height\": \"133\"\r\n                }\r\n            ]\r\n        }\r\n    ]\r\n}<\/pre>\n<pre><code class=\"language-cpp hljs\"><\/code><\/pre>\n<p>&nbsp;<\/p>\n<p>\u89e3\u6790\u4ee3\u7801\uff1a<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">int ParseJsonFromFile(const char* filename)\r\n{\r\n  \/\/ \u89e3\u6790json\u7528Json::Reader\r\n  Json::Reader reader;\r\n  \/\/ Json::Value\u662f\u4e00\u79cd\u5f88\u91cd\u8981\u7684\u7c7b\u578b\uff0c\u53ef\u4ee5\u4ee3\u8868\u4efb\u610f\u7c7b\u578b\u3002\u5982int, string, object, array...\r\n  Json::Value root;       \r\n \r\n  std::ifstream is;\r\n  is.open (filename, std::ios::binary );  \r\n  if (reader.parse(is, root))\r\n  {\r\n    std::string code;\r\n    if (!root[\"files\"].isNull())  \/\/ \u8bbf\u95ee\u8282\u70b9\uff0cAccess an object value by name, create a null member if it does not exist.\r\n      code = root[\"uploadid\"].asString();\r\n    \r\n    \/\/ \u8bbf\u95ee\u8282\u70b9\uff0cReturn the member named key if it exist, defaultValue otherwise.\r\n    code = root.get(\"uploadid\", \"null\").asString();\r\n \r\n    \/\/ \u5f97\u5230\"files\"\u7684\u6570\u7ec4\u4e2a\u6570\r\n    int file_size = root[\"files\"].size();\r\n \r\n    \/\/ \u904d\u5386\u6570\u7ec4\r\n    for(int i = 0; i &lt; file_size; ++i)\r\n    {\r\n      Json::Value val_image = root[\"files\"][i][\"images\"];\r\n      int image_size = val_image.size();\r\n      for(int j = 0; j &lt; image_size; ++j)\r\n      {\r\n        std::string type = val_image[j][\"type\"].asString();\r\n        std::string url = val_image[j][\"url\"].asString();\r\n      }\r\n    }\r\n  }\r\n  is.close();\r\n  return 0;\r\n}<\/pre>\n<pre><code class=\"language-cpp hljs\"><\/code><\/pre>\n<div class=\"hljs-ln-numbers\"><\/div>\n<p>3. \u5728json\u7ed3\u6784\u4e2d\u63d2\u5165json<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">Json::Value arrayObj;   \/\/ \u6784\u5efa\u5bf9\u8c61\r\nJson::Value new_item, new_item1;\r\nnew_item[\"date\"] = \"2011-12-28\";\r\nnew_item1[\"time\"] = \"22:30:36\";\r\narrayObj.append(new_item);  \/\/ \u63d2\u5165\u6570\u7ec4\u6210\u5458\r\narrayObj.append(new_item1); \/\/ \u63d2\u5165\u6570\u7ec4\u6210\u5458\r\nint file_size = root[\"files\"].size();\r\nfor(int i = 0; i &lt; file_size; ++i)\r\n  root[\"files\"][i][\"exifs\"] = arrayObj;   \/\/ \u63d2\u5165\u539fjson\u4e2d<\/pre>\n<pre><code class=\"language-cpp hljs\"><\/code><\/pre>\n<pre><code class=\"language-cpp hljs\"><\/code><\/pre>\n<p>4. \u8f93\u51fajson<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">\/\/ \u8f6c\u6362\u4e3a\u5b57\u7b26\u4e32\uff08\u5e26\u683c\u5f0f\uff09\r\nstd::string out = root.toStyledString();\r\n\/\/ \u8f93\u51fa\u65e0\u683c\u5f0fjson\u5b57\u7b26\u4e32\r\nJson::FastWriter writer;\r\nstd::string out2 = writer.write(root);<\/pre>\n<pre><code class=\"language-cpp hljs\"><\/code><\/pre>\n<pre><code class=\"language-cpp hljs\"><\/code><\/pre>\n<h3><a name=\"t1\"><\/a>\u4e8c. \u4f7f\u7528Boost property_tree\u89e3\u6790json<\/h3>\n<p>property_tree\u53ef\u4ee5\u89e3\u6790xml\uff0cjson\uff0cini\uff0cinfo\u7b49\u683c\u5f0f\u7684\u6570\u636e\uff0c\u7528property_tree\u89e3\u6790\u8fd9\u51e0\u79cd\u683c\u5f0f\u4f7f\u7528\u65b9\u6cd5\u5f88\u76f8\u4f3c\u3002<\/p>\n<p>\u89e3\u6790json\u5f88\u7b80\u5355\uff0c\u547d\u540d\u7a7a\u95f4\u4e3aboost::property_tree\uff0creson_json\u51fd\u6570\u5c06\u6587\u4ef6\u6d41\u3001\u5b57\u7b26\u4e32\u89e3\u6790\u5230ptree\uff0cwrite_json\u5c06ptree\u8f93\u51fa\u4e3a\u5b57\u7b26\u4e32\u6216\u6587\u4ef6\u6d41\u3002\u5176\u4f59\u7684\u90fd\u662f\u5bf9ptree\u7684\u64cd\u4f5c\u3002<\/p>\n<p>\u89e3\u6790json\u9700\u8981\u52a0\u5934\u6587\u4ef6\uff1a<\/p>\n<p>#include &lt;boost\/property_tree\/ptree.hpp&gt;<br \/>\n#include &lt;boost\/property_tree\/json_parser.hpp&gt;<\/p>\n<p>1. \u89e3\u6790json<\/p>\n<p>\u89e3\u6790\u4e00\u6bb5\u4e0b\u9762\u7684\u6570\u636e\uff1a<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">{\r\n  \"code\": 0,\r\n  \"images\":\r\n  [\r\n    {\r\n      \"url\": \"fmn057\/20111221\/1130\/head_kJoO_05d9000251de125c.jpg\"\r\n    },\r\n    {\r\n      \"url\": \"fmn057\/20111221\/1130\/original_kJoO_05d9000251de125c.jpg\"\r\n    }\r\n  ]\r\n}<\/pre>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">int ParseJson()\r\n{\r\n  std::string str = \"{\\\"code\\\":0,\\\"images\\\":[{\\\"url\\\":\\\"fmn057\/20111221\/1130\/head_kJoO_05d9000251de125c.jpg\\\"},{\\\"url\\\":\\\"fmn057\/20111221\/1130\/original_kJoO_05d9000251de125c.jpg\\\"}]}\";\r\n  using namespace boost::property_tree;\r\n \r\n  std::stringstream ss(str);\r\n  ptree pt;\r\n  try{    \r\n    read_json(ss, pt);\r\n  }\r\n  catch(ptree_error &amp; e) {\r\n    return 1; \r\n  }\r\n \r\n  try{\r\n    int code = pt.get&lt;int&gt;(\"code\");   \/\/ \u5f97\u5230\"code\"\u7684value\r\n    ptree image_array = pt.get_child(\"images\");  \/\/ get_child\u5f97\u5230\u6570\u7ec4\u5bf9\u8c61\r\n    \r\n    \/\/ \u904d\u5386\u6570\u7ec4\r\n    BOOST_FOREACH(boost::property_tree::ptree::value_type &amp;v, image_array)\r\n    {\r\n      std::stringstream s;\r\n      write_json(s, v.second);\r\n      std::string image_item = s.str();\r\n    }\r\n  }\r\n  catch (ptree_error &amp; e)\r\n  {\r\n    return 2;\r\n  }\r\n  return 0;\r\n}<\/pre>\n<p>&nbsp;<\/p>\n<p>2. \u6784\u9020json<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">int InsertJson()\r\n{\r\n  std::string str = \"{\\\"code\\\":0,\\\"images\\\":[{\\\"url\\\":\\\"fmn057\/20111221\/1130\/head_kJoO_05d9000251de125c.jpg\\\"},{\\\"url\\\":\\\"fmn057\/20111221\/1130\/original_kJoO_05d9000251de125c.jpg\\\"}]}\";\r\n  using namespace boost::property_tree;\r\n \r\n  std::stringstream ss(str);\r\n  ptree pt;\r\n  try{    \r\n    read_json(ss, pt);\r\n  }\r\n  catch(ptree_error &amp; e) {\r\n    return 1; \r\n  }\r\n \r\n  \/\/ \u4fee\u6539\/\u589e\u52a0\u4e00\u4e2akey-value\uff0ckey\u4e0d\u5b58\u5728\u5219\u589e\u52a0\r\n  pt.put(\"upid\", \"00001\");\r\n \r\n  \/\/ \u63d2\u5165\u4e00\u4e2a\u6570\u7ec4\r\n  ptree exif_array;\r\n  ptree array1, array2, array3;\r\n  array1.put(\"Make\", \"NIKON\");\r\n  array2.put(\"DateTime\", \"2011:05:31 06:47:09\");\r\n  array3.put(\"Software\", \"Ver.1.01\");\r\n  exif_array.push_back(std::make_pair(\"\", array1));\r\n  exif_array.push_back(std::make_pair(\"\", array2));\r\n  exif_array.push_back(std::make_pair(\"\", array3));\r\n \r\n\/\/   exif_array.push_back(std::make_pair(\"Make\", \"NIKON\"));\r\n\/\/   exif_array.push_back(std::make_pair(\"DateTime\", \"2011:05:31 06:47:09\"));\r\n\/\/   exif_array.push_back(std::make_pair(\"Software\", \"Ver.1.01\"));\r\n \r\n  pt.put_child(\"exifs\", exif_array);\r\n  std::stringstream s2;\r\n  write_json(s2, pt);\r\n  std::string outstr = s2.str();\r\n \r\n  return 0;\r\n}<\/pre>\n<p>&nbsp;<\/p>\n<h3><a name=\"t2\"><\/a>\u4e09. \u4e24\u79cd\u89e3\u6790\u5e93\u7684\u4f7f\u7528\u7ecf\u9a8c<\/h3>\n<p>1. \u7528boost::property_tree\u89e3\u6790\u5b57\u7b26\u4e32\u9047\u5230&#8221;\\\/&#8221;\u65f6\u89e3\u6790\u5931\u8d25\uff0c\u800cjsoncpp\u53ef\u4ee5\u89e3\u6790\u6210\u529f\uff0c\u8981\u77e5\u9053&#8217;\/&#8217;\u524d\u9762\u52a0\u4e00\u4e2a&#8217;\\&#8217;\u662fJSON\u6807\u51c6\u683c\u5f0f\u3002<\/p>\n<p>2. boost::property_tree\u7684read_json\u548cwrite_json\u5728\u591a\u7ebf\u7a0b\u4e2d\u4f7f\u7528\u4f1a\u5f15\u8d77\u5d29\u6e83\u3002<\/p>\n<p>\u9488\u5bf91\uff0c\u53ef\u4ee5\u5728\u4f7f\u7528boost::property_tree\u89e3\u6790\u524d\u5199\u4e2a\u51fd\u6570\u53bb\u6389&#8221;\\\/&#8221;\u4e2d\u7684&#8217;\\&#8217;\uff0c\u9488\u5bf92\uff0c\u5728\u591a\u7ebf\u7a0b\u4e2d\u540c\u6b65\u4e00\u4e0b\u53ef\u4ee5\u89e3\u51b3\u3002<\/p>\n<p>\u6211\u7684\u4f7f\u7528\u5fc3\u5f97\uff1a\u4f7f\u7528boost::property_tree\u4e0d\u4ec5\u53ef\u4ee5\u89e3\u6790json\uff0c\u8fd8\u53ef\u4ee5\u89e3\u6790xml\uff0cinfo\u7b49\u683c\u5f0f\u7684\u6570\u636e\u3002\u5bf9\u4e8e\u89e3\u6790json\uff0c\u4f7f\u7528boost::property_tree\u89e3\u6790\u8fd8\u53ef\u4ee5\u5fcd\u53d7\uff0c\u4f46\u89e3\u6790xml\uff0c\u7531\u4e8e\u9047\u5230\u95ee\u9898\u592a\u591a\u53ea\u80fd\u6362\u5176\u5b83\u5e93\u4e86\u3002<\/p>\n<\/div>\n<\/div>\n<\/article>\n","protected":false},"excerpt":{"rendered":"<p>JSON(JavaScript Obje<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"colormag_page_container_layout":"default_layout","colormag_page_sidebar_layout":"default_layout","footnotes":""},"categories":[],"tags":[119],"class_list":["post-2703","post","type-post","status-publish","format-standard","hentry","tag-03-"],"_links":{"self":[{"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/posts\/2703","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/comments?post=2703"}],"version-history":[{"count":0,"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/posts\/2703\/revisions"}],"wp:attachment":[{"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/media?parent=2703"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/categories?post=2703"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/tags?post=2703"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}