json c语言开发,Parson - 用C语言编写的轻量级JSON库

About

Parson is a lighweight json library written in C.

Features

Full JSON support

Lightweight (only 2 files)

Simple API

Addressing json values with dot notation (similar to C structs or objects in most OO languages, e.g. "objectA.objectB.value")

C89 compatible

Test suites

Installation

Run:

git clone https://github.com/kgabis/parson.git

and copy parson.h and parson.c to you source code tree.

Run make test to compile and run tests.

Examples

Parsing JSON

Here is a function, which prints basic commit info (date, sha and author) from a github repository.

void print_commits_info(const char *username, const char *repo) {

JSON_Value *root_value;

JSON_Array *commits;

JSON_Object *commit;

size_t i;

char curl_command[512];

char cleanup_command[256];

char output_filename[] = "commits.json";

/* it ain't pretty, but it's not a libcurl tutorial */

sprintf(curl_command,

"curl -s \"https://api.github.com/repos/%s/%s/commits\" > %s",

username, repo, output_filename);

sprintf(cleanup_command, "rm -f %s", output_filename);

system(curl_command);

/* parsing json and validating output */

root_value = json_parse_file(output_filename);

if (json_value_get_type(root_value) != JSONArray) {

system(cleanup_command);

return;

}

/* getting array from root value and printing commit info */

commits = json_value_get_array(root_value);

printf("%-10.10s %-10.10s %s\n", "Date", "SHA", "Author");

for (i = 0; i < json_array_get_count(commits); i++) {

commit = json_array_get_object(commits, i);

printf("%.10s %.10s %s\n",

json_object_dotget_string(commit, "commit.author.date"),

json_object_get_string(commit, "sha"),

json_object_dotget_string(commit, "commit.author.name"));

}

/* cleanup code */

json_value_free(root_value);

system(cleanup_command);

}

Calling print_commits_info("torvalds", "linux"); prints:

Date SHA Author

2012-10-15 dd8e8c4a2c David Rientjes

2012-10-15 3ce9e53e78 Michal Marek

2012-10-14 29bb4cc5e0 Randy Dunlap

2012-10-15 325adeb55e Ralf Baechle

2012-10-14 68687c842c Russell King

2012-10-14 ddffeb8c4d Linus Torvalds

...

Persistence

In this example I'm using parson to save user information to a file and then load it and validate later.

void persistence_example(void) {

JSON_Value *schema = json_parse_string("{\"name\":\"\"}");

JSON_Value *user_data = json_parse_file("user_data.json");

char buf[256];

const char *name = NULL;

if (user_data == NULL || json_validate(schema, user_data) != JSONSuccess) {

puts("Enter your name:");

scanf("%s", buf);

user_data = json_value_init_object();

json_object_set_string(json_object(user_data), "name", buf);

json_serialize_to_file(user_data, "user_data.json");

}

name = json_object_get_string(json_object(user_data), "name");

printf("Hello, %s.", name);

json_value_free(schema);

json_value_free(user_data);

return;

}

Serialization

Creating JSON values is very simple thanks to the dot notation. Object hierarchy is automatically created when addressing specific fields. In the following example I create a simple JSON value containing basic information about a person.

void serialization_example(void) {

JSON_Value *root_value = json_value_init_object();

JSON_Object *root_object = json_value_get_object(root_value);

char *serialized_string = NULL;

json_object_set_string(root_object, "name", "John Smith");

json_object_set_number(root_object, "age", 25);

json_object_dotset_string(root_object, "address.city", "Cupertino");

json_object_dotset_value(root_object, "contact.emails", json_parse_string("[\"email@example.com\",\"email2@example.com\"]"));

serialized_string = json_serialize_to_string_pretty(root_value);

puts(serialized_string);

json_free_serialized_string(serialized_string);

json_value_free(root_value);

}

Output:

{

"name": "John Smith",

"age": 25,

"address": {

"city": "Cupertino"

},

"contact": {

"emails": [

"email@example.com",

"email2@example.com"

]

}

}

Contributing

I will always merge working bug fixes. However, if you want to add something new to the API, please create an "issue" on github for this first so we can discuss if it should end up in the library before you start implementing it. Remember to follow parson's code style and write appropriate tests.

My other projects

ape - simple programming language implemented in C library

kgflags - easy to use command-line flag parsing library

agnes - header-only NES emulation library

License

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用 `parson` 提供的方法创建 JSON 对象并打印出来,需要进行以下步骤: 1. 引入 `parson` ,可以通过在代码中使用 `#include "parson.h"` 来实现。 2. 创建一个 `JSON_Value` 对象,并使用 `json_value_init_object()` 函数对其进行初始化,表示这是一个 JSON 对象。 3. 使用 `json_object_set_string()` 函数将键值对添加到 JSON 对象中,该函数的第一个参数为 JSON 对象,第二个参数为键,第三个参数为值。 4. 使用 `json_serialize_to_string()` 函数将 JSON 对象序列化为字符串。 5. 打印 JSON 字符串。 下面是示例代码: ``` #include "parson.h" #include <stdio.h> int main() { // 创建 JSON 对象 JSON_Value *root_value = json_value_init_object(); JSON_Object *root_object = json_value_get_object(root_value); // 添加键值对到 JSON 对象中 json_object_set_string(root_object, "name", "Alice"); json_object_set_number(root_object, "age", 30); json_object_set_boolean(root_object, "isMarried", true); // 将 JSON 对象序列化为字符串并打印 char *serialized_string = json_serialize_to_string(root_value); printf("%s\n", serialized_string); // 释放内存 json_free_serialized_string(serialized_string); json_value_free(root_value); return 0; } ``` 上述代码将创建一个 JSON 对象,将三个键值对添加到其中,然后将 JSON 对象序列化为字符串并打印出来。输出结果应该类似于: ``` {"name":"Alice","age":30,"isMarried":true} ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值