在C語言中解析JSON字符串并將其轉碼為任意數據類型是一個非常常見的任務。下面將介紹一個使用C解析JSON的方法:
// 定義JSON字符串char jsonStr[] = "{ \"name\":\"Tom\", \"age\":20 }";// 解析JSON字符串json_object *root = json_tokener_parse(jsonStr);// 獲取數據并轉換為需要的類型char *name = (char *)json_object_get_string(json_object_object_get(root, "name")); int age = json_object_get_int(json_object_object_get(root, "age"));
以上代碼使用了json-c庫,該庫提供了JSON字符串解析和編碼的函數。 json_tokener_parse函數將JSON字符串轉換為json_object對象。在轉換完成后,可以使用json_object_object_get函數訪問其中的屬性值。
在處理大型JSON字符串時,可能需要使用更高效的方式來解析JSON。此時,可以將JSON轉換成二進制格式(比如MsgPack或Protobuf),以提高解析速度和內存使用效率。在這種情況下,可以使用一些開源的庫,例如MsgPack-c或protobuf-c。
// 將JSON轉換為二進制數據MsgPackNode *packNode = jsonStr2MsgPack(jsonStr);// 從二進制數據中獲取需要的值char *name = (char *)msgpack_node_bin_data( msgpack_node_map_find_child_by_key(packNode, "name"), &size); int age = msgpack_node_int(msgpack_node_map_find_child_by_key(packNode, "age"));
這段代碼使用了msgpack-c庫的jsonStr2MsgPack函數將JSON字符串轉換為MsgPackNode對象。然后,使用msgpack_node_map_find_child_by_key和msgpack_node_int函數從二進制數據中獲取屬性值。