内容简介:使用 C 语言编写的 JSON 库还有很多,可以在所有发布的
json-c 是 C 语言写的一套构建和解析 JSON 的库。
JSON-C implements a reference counting object model that allows you to easily construct JSON objects in C, output them as JSON formatted strings and parse JSON formatted strings back into the C representation of JSON objects. It aims to conform to RFC 7159.
使用 C 语言编写的 JSON 库还有很多,可以在 介绍 JSON 中查找到,除了 C语言 的还有其他语言编写的 JSON 开源库。
所有发布的 json-c
库版本在 这里 都可以找到,本篇编译的是 json-c-0.13.1-20180305 这个版本。
编译
一、下载、解压
直接下载最新版本 json-c-0.13.1-20180305 ,截止到本文发布该版本为最新版本。
解压刚才下载好的文件,解压后将文件夹重命名为 json-c-src
,当然你也可以不重名它。
打开 macOS 终端,进入 json-c-src
文件夹
cd json-c-src
二、源码编译
在编译之前,确保你已经在 macOS 中安装了下面的工具:
1、gcc, clang, 或者其他 C 编译器;
2、libtool 工具,版本不能低于 2.2.6b;
3、autoconf 工具,版本不能低于 2.64 (autoreconf);
4、automake工具,版本不能低于 1.13;
如果没有安装上面的工具,可以使用 Homebrew
进行安装。
在桌面新建个文件夹 json-c
,这个文件夹用来放待会编译后的文件(库和头文件)。
执行下面的命令开始配置和编译,如下:
./configure --prefix=/Users/man/Desktop/json-c make make install
注意: /Users/man/Desktop/json-c
要写绝对路径,否则编译报错。
如果要支持多线程,可以加上 --enable-threading
这个选项,即:
./configure --enable-threading --prefix=/Users/man/Desktop/json-c make make install
编译成功后,在 json-c
会生成对应的库和头文件,如下:
使用 json-c
编译成功后,可以试用一下 json-c
这个库了,我把 libjson-c.a
和对应的 include
文件夹放进 macOS 工程,编译无法通过,报错,然后换为 libjson-c.4.dylib
编译通过但是运行报错,意思是无法加载该库。
同样道理,在 iOS 工程上面直接使用这两个库也是无法使用。
于是我就使用 lipo
来查看一下库所支持的架构,看一下下面的结果。
$ lipo -info libjson-c.a Non-fat file: libjson-c.a is architecture: x86_64 $ lipo -info libjson-c.4.dylib Non-fat file: libjson-c.4.dylib is architecture: x86_64
可以看出两个库均可以支持 x86_64,按道理是可以支持 macOS 和 iOS 模拟器运行的,macOS 上面可以使用 set | grep "MACHTYPE"
命令查看其操作系统架构。
libjson-c.a
是静态库, libjson-c.4.dylib
是动态库,可以使用 file
命令查看。
$ file libjson-c.a libjson-c.a: current ar archive $ file libjson-c.4.dylib libjson-c.4.dylib: Mach-O 64-bit dynamically linked shared library x86_64
注意:显示 ar archive
表示是静态库。
最后自己没有找到好的办法,只能采取第二个办法,源码直接放进 Xcode 工程里面编译使用。
在放进 Xcode 工程之前,需要将下载的源码进行配置操作,即:
./configure
这样会产生对应 config.h
等文件,然后将源码中所有 .h
和 .c
的文件拷贝至工程中即可编译使用了。
注意:如果不执行 ./configure
操作,拷贝的源文件不全,无法通过编译。
简单例子,如下:
#import"ViewController.h" #import"json-c/json.h" @interface ViewController() @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; json_object *jsonObj = NULL; jsonObj = json_tokener_parse("{ \"uid\": 12, \"name\": \"foobar\", \"isComer\": 1, \"age\": 21, \"extras\": [ 11, 52, 3, \"unknow\", 75 ] }"); const char *jsonString = json_object_to_json_string(jsonObj); printf("obj.to_string()=%s\n", jsonString); } @end
对应输出结果,如下:
obj.to_string()={ "uid": 12, "name": "foobar", "isComer": 1, "age": 21, "extras": [ 11, 52, 3, "unknow", 75 ] }
疑问
Objective-C 已经提供了关于 JSON 的库了,干嘛还折腾 json-c 呢?
的确,自从 iOS 5.0+,macOS 10.7+ 之后, Foundation
框架已经提供了 NSJSONSerialization
,我主要是好奇 json-c
这个库,看他的跨平台能力而已。
关于 NSJSONSerialization
可以查看 API 文档 。
本次分享,告辞!
扫码关注,你我就各多一个朋友~
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
网页设计创意书(卷2)
麦克尼尔 / 图灵编辑部 / 人民邮电 / 2012-1 / 49.00元
《网页设计创意书(卷2)》是《网页设计创意书》的卷2,但并非其简单补充,而是作者基于近几年网站发展新趋势的再创作。《网页设计创意书(卷2)》先讲解了如何从他人的优秀设计中寻找灵感,接着阐述了重点、对比、平衡、对齐等网站设计的基本原则,然后将网站按类型、设计元素、风格和主题、结构样式和结构元素分类,并分章介绍了每一类的设计技巧。《网页设计创意书(卷2)》语言简练,结合作者精挑细选的网站实例,通俗易懂......一起来看看 《网页设计创意书(卷2)》 这本书的介绍吧!
JSON 在线解析
在线 JSON 格式化工具
Base64 编码/解码
Base64 编码/解码