分享

jsonc库的安装以及简单使用

 薛董_艾瑞 2018-03-21

if 0

1:cpp在linux下的配置
JSON 官方的解释为:JSON 是一种轻量级的数据传输格式。

关于 JSON 更具体的信息,可参见 JSON 官网:http://www.

jsoncpp 是比较出名的 C++ JSON 解析库。在 JSON 官网也是首推的。

下载地址为:http:///projects/jsoncpp(版本为jsoncpp-src-0.5.0)。

下面开始说明配置方法:

1、先下载scons:(http://www./)(版本为scons-2.1.0)并解压;

设定环境变量 # export MYSCONS=解压的路径
  • 1
  • 2

2、scons部署:进入scons解压目录(假定为MYSCONSpythonMYSCONS/setup.py install将scons部署完毕。

3、使用scons编译jsoncpp(版本为jsoncpp-src-0.5.0)

进入jsoncpp解压目录,执行命令: # python $MYSCONS/script/scons.py platform=linux-gcc
**注:若果提示没找到scons.py则该为/script/scons platform = linux-gcc
将jsoncpp编译,在解压目录jsoncpp-src-0.5.0/libs/linux-gcc-3.4.6下可以看到生成了两个文件:

libjson_linux-gcc-4.6.1_libmt.a

libjson_linux-gcc-4.6.1_libmt.so

把.a文件拷贝到/usr/local/lib 目录下,为了方便编译给它改个名字libjsonlib.a
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

4、将jsoncpp目录下的头文件件拷到自己的工程里就可以使用了。

注意在编译里指定动态链接库的地址。 -ljsonlib

例子代码:

include

include

include “json/json.h”

int main(void)

{

 Json::Value root;

 Json::FastWriter fast_writer;

 root["REGION_ID"] = "600901";

 root["DATA_TOTAL_NUM"] = "456278";

 std::cout << fast_writer.write(root) << std::endl;

 return 0;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

}

输出:{“DATA_TOTAL_NUM”:”456278”,”REGION_ID”:”600901”}

endif

else

jsonc库的安装以及简单使用

一、安装

jsonc库的源码可以从github上下载:https://github.com/jehiah/json-c

下载完的源码解压后,在目录下的个README.MD文件,我们根据文件中提示的步骤对jonsc进行安装:

  1. 下载安装时必要的工具:libtool, gcc, autoconf。我们可以使用软件包管理工具安装它们。比如在ubuntu下,可以使用命令

sudo apt-get install gcc libtool autoconf
安装这三个工具。
2. 按照README.MD文件,运行以下命令

sh autogen.sh
./configure
make
sudo make install
3. 安装完后,一般会在/usr/local/include下生成jsonc的头文件,以及在/usr/local/lib下生成jsonc的库文件,检查一下即可。

二、使用
该部分内容引用自http://www./RickHigh/entry/json_parsing_with_c_simple.

include

include

include

include

include “json.h”

int main(int argc, char **argv)
{
struct json_object *new_obj;
MC_SET_DEBUG(1);
// I added some new lines… not in real program
new_obj = json_tokener_parse(“/* more difficult test case */ { \”glossary\”: { \”title\”:
\”example glossary\”, \”pageCount\”: 100, \”GlossDiv\”: { \”title\”: \”S\”, \”GlossList\”:
[ { \”ID\”: \”SGML\”, \”SortAs\”: \”SGML\”, \”GlossTerm\”: \”Standard Generalized Markup Language\”, \”Acronym\”: \”SGML\”, \”Abbrev\”: \”ISO 8879:1986\”, \”GlossDef\”:
\”A meta-markup language, used to create markup languages such as DocBook.\”,
\”GlossSeeAlso\”: [\”GML\”, \”XML\”, \”markup\”] } ] } } }”);

printf(“new_obj.to_string()=%s\n”, json_object_to_json_string(new_obj));
new_obj = json_object_object_get(new_obj, “glossary”);
printf(“new_obj.to_string()=%s\n”, json_object_to_json_string(new_obj));
new_obj = json_object_object_get(new_obj, “pageCount”);
int pageCount = json_object_get_int(new_obj);
printf(“Page count = %d”, pageCount);
json_object_put(new_obj);
return 0;
}
下面,我们对这个例子进行解析:
第8行: 声明一个struct json_object类型的指针,struct json_object是用于存储json数据的一种结构类型。
第11行: 使用json_tokener_parse()函数,将字符串化的json数据转化为struct json_object类型的json
第17行: 与第11行的作用相反,json_object_to_json_string()函数可以将struct json_object类型的json数据转化为字符串。
第18行: 使用json_object_object_get()函数,从struct json_object的json数据中,寻找key为”glossary”的value。并将这个value作为一个新的struct json_object类型返回。
第21行: json_object_get_int()函数可以将类型为struct json_object的json数据转化为相应的int类型的数据。与此类似,也有json_object_get_string(), json_object_get_double()等一系列方法。
第23行: json_object_put()函数类似于free()函数,释放之前分配的new_object所占用的空间。

其实,在安装Jsonc库之后,我们可以在jsonc的目录下面找到test文件夹,下面有很多jsonc库的应用实例可以参考。上面所引用的博客中的例子,也是改自于test文件夹下面的程序。

上面的例子,只是解释如何从一个json字符串中获取到必要的信息,如果需要组装自己的json结构,可以参考jsonc API 文档页面:http://json-c./json-c/

Share this:

endif

if 0

下载cJSON.h和cJSON.c,把他们放在项目里一起编译
注:把#include”cJSON.h”放在头文件中的最后面.

endif

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多