内容简介:使用 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 文档 。
本次分享,告辞!
扫码关注,你我就各多一个朋友~
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Head First Design Patterns—深入淺出設計模式
天瓏
寫應用程式時需要依照需求預先規劃、設計,而設計模式累積了前人的經歷,經由四人幫彙整出一系列的設計模式,以利後人可以套用。本書集合四人幫的23個模式(十幾年前的事)外加這十幾年來新增的一些模式,作者群以詼諧、幽默、圖文並茂、打破傳統著書的方式,由淺入深地詳解了設計模式的精神及重點。全書全部以當紅的 Java 程式語言為範例。 本書特點: * 全世界第二本書......一起来看看 《Head First Design Patterns—深入淺出設計模式》 这本书的介绍吧!