json-c

栏目: IOS · 发布时间: 5年前

内容简介:使用 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

使用 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 文档

本次分享,告辞!

扫码关注,你我就各多一个朋友~

json-c


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

网页设计创意书(卷2)

网页设计创意书(卷2)

麦克尼尔 / 图灵编辑部 / 人民邮电 / 2012-1 / 49.00元

《网页设计创意书(卷2)》是《网页设计创意书》的卷2,但并非其简单补充,而是作者基于近几年网站发展新趋势的再创作。《网页设计创意书(卷2)》先讲解了如何从他人的优秀设计中寻找灵感,接着阐述了重点、对比、平衡、对齐等网站设计的基本原则,然后将网站按类型、设计元素、风格和主题、结构样式和结构元素分类,并分章介绍了每一类的设计技巧。《网页设计创意书(卷2)》语言简练,结合作者精挑细选的网站实例,通俗易懂......一起来看看 《网页设计创意书(卷2)》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码