C语言实现ON到数据库实体的解析 (c json解析到数据库实体)

在现代软件开发中,ON成为一种非常常见的数据格式,它被广泛应用于Web应用之中。而数据库实体则是Web应用中常用的数据持久化方式,因此将ON转换为数据库实体是一项非常有用的技术。本文将介绍如何使用。

1. ON简介

ON(JavaScript Object Notation)是一种轻量级的数据交换格式,它基于JavaScript语言的一个子集。ON数据格式支持基本数据类型、数组和对象,在Web应用中扮演着重要的角色。下面是一个ON的示例:

“`

{

“name”: “Jack”,

“age”: 20,

“hobbies”: [“reading”, “swimming”, “travel”],

“address”: {

“province”: “Jiangsu”,

“city”: “Suzhou”,

“street”: “SIP”

}

}

“`

2. 数据库实体介绍

数据库实体(Database Entity)是数据库中的一个概念,它代表一个实物或一个概念。在Web应用中,通常将数据库实体视为应用程序中的模型。下面是一个用户实体(User)的示例:

“`

CREATE TABLE `user` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`name` varchar(32) NOT NULL,

`age` int(11) NOT NULL,

`hobbies` text NOT NULL,

`province` varchar(32) NOT NULL,

`city` varchar(32) NOT NULL,

`street` varchar(32) NOT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

“`

3. C语言解析ON

C语言作为一种高效的编程语言,被广泛应用于系统和嵌入式开发。下面将介绍如何使用C语言解析ON并将其映射到数据库实体中。

我们需要使用第三方库cON来处理ON数据。cON是一种轻量级的ON解析库,它提供了一组简单的API来解析ON数据。我们可以在GitHub上下载cON,并将其包含在我们的代码中。

接下来,我们需要定义一个数据结构来表示用户实体。这里我们使用结构体来表示,结构体的成员与用户实体中的字段对应。代码如下:

“`c

typedef struct {

int id;

char *name;

int age;

char *hobbies[MAX_HOBBY_COUNT];

char *province;

char *city;

char *street;

} User;

“`

在实现ON解析之前,我们需要先实现一些辅助函数。这些函数将用于分配和释放内存、解析和设置用户实体中的字段。这里我们只列出部分函数的实现。

“`c

User *new_user(void) {

User *user = (User *) malloc(sizeof(User));

user->id = 0;

user->name = NULL;

user->age = 0;

user->province = NULL;

user->city = NULL;

user->street = NULL;

memset(user->hobbies, 0, sizeof(user->hobbies));

return user;

}

void delete_user(User *user) {

if (user != NULL) {

if (user->name != NULL) free(user->name);

for (int i = 0; i

if (user->hobbies[i] != NULL) free(user->hobbies[i]);

}

if (user->province != NULL) free(user->province);

if (user->city != NULL) free(user->city);

if (user->street != NULL) free(user->street);

free(user);

}

}

void set_name(User *user, const char *name) {

int len = strlen(name);

user->name = (char *) malloc(len + 1);

strcpy(user->name, name);

}

void set_age(User *user, int age) {

user->age = age;

}

void add_hobby(User *user, const char *hobby) {

for (int i = 0; i

if (user->hobbies[i] == NULL) {

int len = strlen(hobby);

user->hobbies[i] = (char *) malloc(len + 1);

strcpy(user->hobbies[i], hobby);

break;

}

}

}

void set_province(User *user, const char *province) {

int len = strlen(province);

user->province = (char *) malloc(len + 1);

strcpy(user->province, province);

}

void set_city(User *user, const char *city) {

int len = strlen(city);

user->city = (char *) malloc(len + 1);

strcpy(user->city, city);

}

void set_street(User *user, const char *street) {

int len = strlen(street);

user->street = (char *) malloc(len + 1);

strcpy(user->street, street);

}

“`

接下来,我们需要实现一个函数,该函数将ON数据解析为用户实体。我们可以递归地遍历ON数据,并在适当时候调用辅助函数来设置用户实体中的字段。

“`c

User *parse_user(cON *json) {

User *user = new_user();

if (json == NULL) return user;

cON *item;

item = cON_GetObjectItem(json, “id”);

if (item != NULL) {

user->id = item->valueint;

}

item = cON_GetObjectItem(json, “name”);

if (item != NULL) {

set_name(user, item->valuestring);

}

item = cON_GetObjectItem(json, “age”);

if (item != NULL) {

set_age(user, item->valueint);

}

item = cON_GetObjectItem(json, “hobbies”);

if (item != NULL && item->type == cON_Array) {

int size = cON_GetArraySize(item);

for (int i = 0; i

cON *hobby = cON_GetArrayItem(item, i);

if (hobby != NULL && hobby->type == cON_String) {

add_hobby(user, hobby->valuestring);

}

}

}

item = cON_GetObjectItem(json, “address”);

if (item != NULL && item->type == cON_Object) {

cON *province = cON_GetObjectItem(item, “province”);

cON *city = cON_GetObjectItem(item, “city”);

cON *street = cON_GetObjectItem(item, “street”);

if (province != NULL && province->type == cON_String) {

set_province(user, province->valuestring);

}

if (city != NULL && city->type == cON_String) {

set_city(user, city->valuestring);

}

if (street != NULL && street->type == cON_String) {

set_street(user, street->valuestring);

}

}

return user;

}

“`

我们需要实现一个函数,该函数将解析出的用户实体保存到数据库中。这里我们使用MySQL数据库,使用MySQL C API来访问数据库。

“`c

void save_user(User *user) {

MYSQL mysql;

mysql_init(&mysql);

if (mysql_real_connect(&mysql, “localhost”, “root”, “”, “test”, 0, NULL, 0)) {

char sql[1024];

snprintf(sql, sizeof(sql), “INSERT INTO `user`(`name`, `age`, `hobbies`, `province`, `city`, `street`) VALUES(‘%s’, %d, ‘%s’, ‘%s’, ‘%s’, ‘%s’)”,

user->name, user->age, join_strings(user->hobbies, MAX_HOBBY_COUNT), user->province, user->city, user->street);

mysql_query(&mysql, sql);

mysql_close(&mysql);

}

}

“`

我们可以将以上代码组合成一个完整的示例,以下是完整的代码。

相关问题拓展阅读:

  • 解决方法:STM32使用cON解析数据失败
  • 如何把获取的json数据插入数据库

解决方法:STM32使用cON解析数据失败

在 STM32 移植 cON 库后羡卜,使用 cON_Parse() ,解析失败。

使用 cON_GetErrorPtr() 分析出以下错误:

而当去掉 serial_no 字段后,则能够解析成功。

当解析的的数据比较长时,会解析失败,但裤中是短的数据则没有问题,后面排查是因为 cON 解析需要用到的内存比较大,溢出导致解析失败。

查看 STM32 启动文件。如 startup_stm32f407xx.s ,发现:

增大空间后,问题解决

• 由 Leung 写于 2023 年 6 月 30 日

• 参考: STM32工程使用cjson库解析数据失败的原兄纯穗因

如何把获取的json数据插入数据库

特点:

它们可以处理超大量的数据。

它们运行在便宜的PC服务器集群上。

PC集群扩充起来非常方便并且成本很低,避免了“sharding”操作的复杂性和成本。

它们击碎了性能瓶颈。

NoSQL的支持者称,通过NoSQL架构可以省去将Web或Java应用和数据转换成SQL友好格式的时间,执行速度变得更快。

“SQL并非适用于所有的程序代码,” 对于那些繁重的重复操作的数据,SQL值得花钱。但是当数据库结构非常简单时,SQL可能没有太大用处。

没有过多的操作。

虽然NoSQL的支持者也承认关系数据库提供了无可比拟的功能,而且在数据完整性上也发挥绝对稳定,他们同时也表示,企业的具体需求可能没有那么多。

Bootstrap支持

因为NoSQL项目都是开源的,因此它们缺乏供应晌羡商提供的正式支持。这一点它们与大多数开源项目一样,不得不从社区中寻求支持。

优点:

易扩展

NoSQL数据库种类繁多,但是一个共同的特点都是去掉关系数据库的关系型特性。数据之间无关系,这样就非常容易扩展。也无形之间,在架构的层面上带来了可扩展的能力。

大数据量,高性能

NoSQL数据库都具有非常高的读写性能,尤其在大数据量下,同样表现优秀。这得益于它的无关系性,数据库的结构简单。一般MySQL使用 Query Cache,每次表的更新Cache就失效,是一种大粒度的Cache,在针对web2.0的交互频繁的应用,Cache性能不高。而NoSQL的 Cache是记录级的,是一种细粒度的Cache,所以NoSQL在这个层面上来说就要性能高很多察袜了。

灵活的数据模型

NoSQL无需事先为要存储的数据建立字段,随时可以存储自定义的数据格式。而在关系数据库里,增删字段是一件非常麻烦的事情。如果是非常大数据量的表,增加字段简直就是一个噩梦。这点在大数据量的web2.0时代尤其明显。

高可用

NoSQL在不太影响性能的情况,就可以方便的实现高可用的架构。比如Cassandra,HBase模型,通过复制模型也能实现高可用。

主要应用:

Apache HBase

这个大数据管理平台建立在谷歌强大的BigTable管理引擎基础上。作为具有开源、Java编码、分布式多个优势的数据库,Hbase最初被设计应用于Hadoop平台,而这一强大的数据管理工具,也被Facebook采用,用于管理消息平台的庞大数据。

Apache Storm

用于处理高速、大型数据流的分布式实时计算系统。Storm为Apache Hadoop添加了可靠的实时数据处理功能,同时还增加了低延迟的仪表板、安全警报,改进了原有的操作方式,帮助企业更有效率地捕获商业机会、发展新业务。

Apache Spark

该技术采用内存计算,从多迭代批量处理出发,允许将数据载入内存做反复查询,此外还融合数据仓库、流处理和图计算等多种计算范式,Spark用Scala语言实现,构建在HDFS上,能与Hadoop很好的结合,而且运行速度比MapRece快100倍。

Apache Hadoop

该技术迅速成为了大数据管理标准之一。当它被用来管理大型数据集时,对于复杂的分布式应用,宴没拍Hadoop体现出了非常好的性能,平台的灵活性使它可以运行在商用硬件系统,它还可以轻松地集成结构化、半结构化和甚至非结构化数据集。

Apache Drill

你有多大的数据集?其实无论你有多大的数据集,Drill都能轻松应对。通过支持HBase、Cassandra和MongoDB,Drill建立了交互式分析平台,允许大规模数据吞吐,而且能很快得出结果。

Apache Sqoop

也许你的数据现在还被锁定于旧系统中,Sqoop可以帮你解决这个问题。这一平台采用并发连接,可以将数据从关系数据库系统方便地转移到Hadoop中,可以自定义数据类型以及元数据传播的映射。事实上,你还可以将数据(如新的数据)导入到HDFS、Hive和Hbase中。

Apache Giraph

这是功能强大的图形处理平台,具有很好可扩展性和可用性。该技术已经被Facebook采用,Giraph可以运行在Hadoop环境中,可以将它直接部署到现有的Hadoop系统中。通过这种方式,你可以得到强大的分布式作图能力,同时还能利用上现有的大数据处理引擎。

Cloudera Impala

Impala模型也可以部署在你现有的Hadoop群集上,监视所有的查询。该技术和MapRece一样,具有强大的批处理能力,而且Impala对于实时的SQL查询也有很好的效果,通过高效的SQL查询,你可以很快的了解到大数据平台上的数据。

Gephi

它可以用来对信息进行关联和量化处理,通过为数据创建功能强大的可视化效果,你可以从数据中得到不一样的洞察力。Gephi已经支持多个图表类型,而且可以在具有上百万个节点的大型网络上运行。Gephi具有活跃的用户社区,Gephi还提供了大量的插件,可以和现有系统完美的集成到一起,它还可以对复杂的IT连接、分布式系统中各个节点、数据流等信息进行可视化分析。

关于c json解析到数据库实体的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

香港服务器首选树叶云,2H2G首月10元开通。
树叶云(www.IDC.Net)提供简单好用,价格厚道的香港/美国云服务器和独立服务器。IDC+ISP+ICP资质。ARIN和APNIC会员。成熟技术团队15年行业经验。

文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/276347.html<

(0)
运维的头像运维
上一篇2025-05-10 15:02
下一篇 2025-05-10 15:03

相关推荐

  • 个人主题怎么制作?

    制作个人主题是一个将个人风格、兴趣或专业领域转化为视觉化或结构化内容的过程,无论是用于个人博客、作品集、社交媒体账号还是品牌形象,核心都是围绕“个人特色”展开,以下从定位、内容规划、视觉设计、技术实现四个维度,详细拆解制作个人主题的完整流程,明确主题定位:找到个人特色的核心主题定位是所有工作的起点,需要先回答……

    2025-11-20
    0
  • 社群营销管理关键是什么?

    社群营销的核心在于通过建立有温度、有价值、有归属感的社群,实现用户留存、转化和品牌传播,其管理需贯穿“目标定位-内容运营-用户互动-数据驱动-风险控制”全流程,以下从五个维度展开详细说明:明确社群定位与目标社群管理的首要任务是精准定位,需明确社群的核心价值(如行业交流、产品使用指导、兴趣分享等)、目标用户画像……

    2025-11-20
    0
  • 香港公司网站备案需要什么材料?

    香港公司进行网站备案是一个涉及多部门协调、流程相对严谨的过程,尤其需兼顾中国内地与香港两地的监管要求,由于香港公司注册地与中国内地不同,其网站若主要服务内地用户或使用内地服务器,需根据服务器位置、网站内容性质等,选择对应的备案路径(如工信部ICP备案或公安备案),以下从备案主体资格、流程步骤、材料准备、注意事项……

    2025-11-20
    0
  • 如何企业上云推广

    企业上云已成为数字化转型的核心战略,但推广过程中需结合行业特性、企业痛点与市场需求,构建系统性、多维度的推广体系,以下从市场定位、策略设计、执行落地及效果优化四个维度,详细拆解企业上云推广的实践路径,精准定位:明确目标企业与核心价值企业上云并非“一刀切”的方案,需先锁定目标客户群体,提炼差异化价值主张,客户分层……

    2025-11-20
    0
  • PS设计搜索框的实用技巧有哪些?

    在PS中设计一个美观且功能性的搜索框需要结合创意构思、视觉设计和用户体验考量,以下从设计思路、制作步骤、细节优化及交互预览等方面详细说明,帮助打造符合需求的搜索框,设计前的规划明确使用场景:根据网站或APP的整体风格确定搜索框的调性,例如极简风适合细线条和纯色,科技感适合渐变和发光效果,电商类则可能需要突出搜索……

    2025-11-20
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注