用libjson-glib处理json数据

本文介绍了如何在C语言中使用libjson-glib库处理JSON数据。通过在Ubuntu 14.04上安装libjson-glib,创建JSON测试文件并编写C程序读取解析JSON,展示了libjson-glib的简单应用。

json是一个轻量级的数据交换格式,在我们的一些大型程序时,可以用它来存储一些数据信息。前一篇演示了nodejs解析json的过程,今天我们要用我们传统的c语言来处理。

要用c语言来处理我们就需要依赖一些额外的库,虽然处理json的c库很多,但是今天我们就选择libjson-glib.

第一,在ubuntu14.04 安装libjson-glib

$ sudo apt-get install libjson-glib-1.0-0 libjson-glib-dev

第二,准备json测试文件, test.json:

{  
  "person": {  
    "name": "wanger",  
    "birth": "1999"  
  }  
}  


第三,创建main.c 来处理json文件

/*gcc -o testjson main.c `pkg-config --cflags --libs json-glib-1.0`
*/

#include <json-glib/json-glib.h>

static void print_cb(JsonObject *obj, const gchar *key, JsonNode *val, gpointer    user_data)
{
        gchar *rel_val = "";
        GType type = json_node_get_value_type(val);
        g_message("typename:%s", g_type_name(type));

        if (g_type_is_a(type, G_TYPE_STRING)) {
                rel_val =(gchar *)j
在使用 [json-c](https://github.com/json-c/json-c) 库进行 JSON 数据解析时,如果你想要判断某个 JSON 对象中是否包含字段 `"a"`,你可以使用 `json_object_object_get_ex()` 函数来实现。 这个函数不仅用于获取字段的值,还会返回一个布尔值,表示该字段是否存在。 --- ### ✅ 示例代码:判断 JSON 对象中是否包含字段 `"a"` ```c #include <stdio.h> #include <json-c/json.h> int main() { // 示例 JSON 字符串 const char *json_str = "{\"a\": 42, \"b\": \"hello\"}"; // 解析 JSON 字符串 struct json_object *root = json_tokener_parse(json_str); if (root == NULL) { printf("JSON 解析失败\n"); return 1; } // 检查字段 "a" 是否存在 struct json_object *jobj_a; if (json_object_object_get_ex(root, "a", &jobj_a)) { printf("字段 \"a\" 存在\n"); // 可选:获取字段值 if (json_object_is_type(jobj_a, json_type_int)) { int a_value = json_object_get_int(jobj_a); printf("字段 \"a\" 的值为: %d\n", a_value); } } else { printf("字段 \"a\" 不存在\n"); } // 释放对象 json_object_put(root); return 0; } ``` --- ### 🔍 解释: - **`json_tokener_parse(json_str)`**:将 JSON 字符串解析成 `json_object` 结构。 - **`json_object_object_get_ex(obj, key, &value)`**: - 第三个参数是一个输出参数,用于存储字段对应的值。 - 返回值为 `true` 表示字段存在,`false` 表示字段不存在。 - **`json_object_is_type(obj, json_type_int)`**:判断字段的类型是否为整型。 - **`json_object_get_int(obj)`**:获取整型值。 - **`json_object_put(obj)`**:释放 JSON 对象(引用计数减少)。 --- ### ✅ 编译方式(需要安装 json-c 库): ```bash gcc your_file.c -o json_check -ljson-c ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值