当前位置:首页 > 问答 > 正文

ON数据和数据库怎么接,json格式的数据也能轻松搞定对接问题

“ON数据和数据库怎么接,json格式的数据也能轻松搞定对接问题”这个说法,其实来源于日常开发中一个非常普遍的需求:如何让应用程序(也就是你提到的“ON数据”,这可能是个简称或笔误,通常指代正在运行的程序或在线服务产生的数据)和数据库进行通信,并且在这个过程中,JSON格式的数据如何扮演一个关键角色,让整个对接过程变得简单,下面我就围绕这个核心意思,抛开复杂的专业术语,用大白话把它讲清楚。

我们得明白应用程序和数据库是两样不同的东西,应用程序,比如一个手机APP或者一个网站,它是活蹦乱跳的,负责跟用户打交道,处理各种业务逻辑,而数据库呢,更像是一个巨大的、井井有条的档案库,它的主要任务就是安安静静地存储数据,保证数据不丢、不乱。“对接”要解决的问题,就是让这个活蹦乱跳的应用程序,能够顺利地从档案库里存取东西。

想象一下,应用程序是个前台服务员,数据库是后厨的仓库,服务员需要向仓库要食材,也需要把新进的食材存进仓库,他们之间不能直接用手递,需要一个标准的、双方都懂的方式来沟通,这个沟通方式,接口”或者“查询语言”(比如最著名的SQL)。

问题来了,服务员(应用程序)平时说话的方式(比如它内部处理数据用的可能是各种编程语言的对象、列表等)和仓库管理员(数据库)能听懂的语言(比如表格、行、列)是不一样的,直接让服务员用自己内部的语言去跟管理员沟通,管理员会完全听不懂,沟通就会失败。

这时候,JSON就闪亮登场了,JSON是一种长得特别像JavaScript对象的文本格式,但它最大的优点是简单、易读、而且几乎所有的编程语言都支持它,你可以把它理解为服务员和管理员之间的一种“通用普通话”或者“标准订单格式”。

JSON是如何轻松搞定对接问题的呢?体现在两个方向上:

第一个方向:应用程序从数据库读取数据。

服务员需要向仓库要一瓶酱油,它不会直接冲进去找,而是用标准订单(比如写一张纸条)发出请求,数据库管理员(数据库系统)接到这个用SQL语言写的“纸条”后,在仓库里找到这瓶酱油,但酱油在仓库里是以一种特定的方式存放的(比如放在某个货架的第几排),管理员不能直接把货架搬给服务员,他需要把酱油拿出来,按照双方约定好的“通用包装盒”——也就是JSON格式——重新包装一下。

ON数据和数据库怎么接,json格式的数据也能轻松搞定对接问题

数据库里有一张“用户表”,里面有一条记录:ID是1,名字叫张三,年龄25,直接从数据库里取出来,可能是一串二进制数据或者特定结构,但通过一些工具(后面会提到),我们可以很方便地把它转换成这样的JSON:

{
  "id": 1,
  "name": "张三",
  "age": 25
}

你看,这个格式非常清晰,"id"、"name"、"age"是字段名,冒号后面是具体的值,应用程序(服务员)拿到这个JSON“包装盒”,可以用各种编程语言里现成的工具(称为JSON解析库)轻松地拆开包装,把数据变成自己内部能直接使用的变量或对象,这个过程就叫“反序列化”,因为JSON的结构是键值对,非常灵活,不管数据多复杂(比如里面再嵌套一个数组或对象),都能很好地表示。

第二个方向:应用程序向数据库写入或更新数据。

反过来,服务员收到一批新酱油,要存进仓库,他也不会直接把酱油瓶扔进仓库了事,他需要先按照“通用包装盒”(JSON格式)把酱油的信息登记好。

ON数据和数据库怎么接,json格式的数据也能轻松搞定对接问题

{
  "brand": "李锦记",
  "type": "生抽",
  "quantity": 50
}

他拿着这个包装好的JSON“订单”,同样通过SQL请求告诉管理员:“请把这个新商品存进去”,数据库那边也有相应的工具,可以把这个JSON“拆包”,理解里面的内容,然后转换成数据库内部存储所需要的表格行和列的形式,再存放到仓库(数据库)的指定位置,这个过程就叫“序列化”。

具体是怎么实现这个过程的呢?并不是说数据库天生就认识JSON,我们需要一个“翻译官”。

这个“翻译官”就是我们在应用程序中编写的代码,以及一些现成的库和框架,举个例子,在Web开发中非常流行的方式是这样的:

  1. 应用程序(比如一个Node.js服务器) 使用一个叫做“ORM”或“ODM”的库(你可以理解为高级翻译官),我们告诉这个库,我们的数据模型长什么样(一个用户应该有id、name、age)。
  2. 当需要查数据时,我们不用写复杂的SQL,可以直接用编程语言的方式操作,User.findByName('张三')
  3. 这个ORM库在背后悄悄地把我们的命令翻译成数据库能懂的SQL语句(SELECT * FROM users WHERE name = '张三'),发给数据库。
  4. 数据库执行查询,返回原始数据。
  5. ORM库再自动把数据库返回的原始数据,“包装”成JSON对象(或者直接包装成我们程序里的User对象),送回给我们的应用程序。

这样一来,我们程序员绝大部分时间都在和JSON或者类似JSON的简单对象打交道,根本不用关心底层数据库复杂的SQL语法和存储细节,这就是所谓的“json格式的数据也能轻松搞定对接问题”的核心——JSON充当了一个标准的、通用的数据交换中介,它极大地简化了应用程序和数据库之间数据格式转换的复杂性。

甚至连很多现代的数据库(比如MySQL 5.7以上版本、PostgreSQL、MongoDB等)都开始原生支持JSON数据类型了,这意味着数据库自己就能直接存储和查询JSON格式的数据,使得这种对接更加自然和高效,就好像仓库管理员也开始学习并接受这种“通用包装盒”,允许服务员直接递送这种盒子入库,并且还能根据盒子上的标签(JSON里面的键)进行快速查找。

应用程序和数据库的对接,关键在于建立一个顺畅的沟通机制,JSON凭借其极简的格式和跨语言的通用性,成为了这个沟通机制中理想的数据载体,通过使用各种开发框架和工具库作为“翻译官”,我们得以用处理JSON这种简单的方式,来完成底层可能很复杂的数据存取操作,从而真正实现了“轻松搞定”,这种模式已经成为现代软件开发,特别是Web和移动应用开发的标准做法。 来源:基于常见的软件开发实践、Web API设计原则以及JSON在数据交换中的广泛应用总结而成。)