0

0

高效地将PostgreSQL jsonb数据传递到JavaScript

霞舞

霞舞

发布时间:2025-10-05 10:42:02

|

440人浏览过

|

来源于php中文网

原创

高效地将postgresql jsonb数据传递到javascript

本文旨在探讨如何高效地将PostgreSQL jsonb字段中已存在的JSON数据通过PHP传递到JavaScript,避免不必要的重复编码和解析。核心方法是在PHP中直接拼接从数据库获取的JSON字符串,构建成一个完整的JSON数组字符串,然后将其传递给JavaScript进行一次性解析,从而优化数据传输流程。

1. 理解PostgreSQL jsonb字段与数据传输挑战

PostgreSQL的jsonb数据类型能够高效存储和查询JSON格式的数据。当应用程序需要将这些数据展示在前端(例如通过JavaScript处理)时,通常会面临一个问题:如何将数据库中已是JSON格式的数据,通过服务器端语言(如PHP)高效地传递到客户端,同时避免不必要的中间转换和性能开销。

传统上,将PHP数组传递给JavaScript通常涉及以下步骤:

  1. 在PHP中构建一个关联数组。
  2. 使用json_encode()函数将PHP数组转换为JSON字符串。
  3. 在HTML的

以下是一个典型的示例:



然而,当我们的数据已经以JSON格式存储在PostgreSQL的jsonb字段中时,这种方法显得不够直接。如果每次都将jsonb字段的JSON字符串解析成PHP数组,再用json_encode()重新编码,最后在JavaScript中再次解析,这无疑增加了不必要的处理步骤和资源消耗。

立即学习Java免费学习笔记(深入)”;

2. jsonb数据传输的常见误区

假设我们有一个名为drone001的表,其中包含一个data字段,类型为jsonb,存储着如下数据:

monitor=# SELECT id, data FROM "drone001" LIMIT 3;
 id |                                             data
----+-----------------------------------------------------------------------------------------------
  1 | {"RX": 13.7, "Speed": 10.1, "Azimuth": 897, "Heading": 125, "DateTime": "2023-03-19 04:14:49"}
  2 | {"RX": 13.4, "Speed": 10.2, "Azimuth": 896, "Heading": 125, "DateTime": "2023-03-19 04:14:47"}
  3 | {"RX": 13.3, "Speed": 10.1, "Azimuth": 896, "Heading": 125, "DateTime": "2023-03-19 04:14:45"}

一个常见的尝试是,从数据库中取出每个jsonb字段的字符串,将它们收集到一个PHP数组中,然后尝试直接将这个PHP数组传递给JavaScript。

select('drone001'); // 假设select方法返回查询结果资源
  $jsondata = array();
  while ($ds = pg_fetch_object($res)) {
    $jsondata[] = $ds->data; // $ds->data 此时是一个JSON字符串
  }
  // 此时 $jsondata 是一个PHP数组,例如:
  // array(
  //   '{"RX": 13.7, ...}',
  //   '{"RX": 13.4, ...}'
  // )
?>

上述代码中,echo $jsondata 当$jsondata是一个PHP数组时,默认会输出字符串"Array",而不是一个有效的JSON字符串。因此,JSON.parse()会失败。要使其工作,我们仍然需要对$jsondata进行json_encode(),但这又回到了前面提到的效率问题。

Voicenotes
Voicenotes

Voicenotes是一款简单直观的多功能AI语音笔记工具

下载

3. 优化方案:直接构建JSON数组字符串

为了避免在PHP中对每个jsonb字段的JSON字符串进行额外的解析和重新编码,我们可以利用jsonb字段本身就是有效JSON字符串的特性。核心思想是:在PHP中,将从数据库获取的每个JSON字符串直接拼接起来,并用逗号分隔,最后在外部包裹方括号[],从而形成一个完整的JSON数组字符串。

这样,PHP就只负责字符串的拼接,而不是JSON的解析和编码,将最终的JSON.parse()操作留给JavaScript一次性完成。

以下是实现这一优化方案的PHP和JavaScript代码:

select('drone001'); 
  $jsonStringFragments = ''; // 用于存储拼接的 JSON 字符串片段

  while ($ds = pg_fetch_object($res)) {
    // $ds->data 已经是有效的 JSON 字符串,直接拼接
    $jsonStringFragments .= $ds->data . ",";
  }

  // 移除末尾多余的逗号
  $jsonStringFragments = rtrim($jsonStringFragments, ",");

  // 将所有 JSON 对象字符串包裹在方括号中,形成一个 JSON 数组字符串
  $finalJsonArrayString = "[" . $jsonStringFragments . "]";
?>

4. 方案优势与注意事项

优势:

  • 性能提升: 避免了PHP对每个jsonb字段进行json_decode()和json_encode()的CPU密集型操作。PHP只进行简单的字符串拼接,将复杂的JSON解析任务推迟到客户端的JavaScript引擎,通常客户端浏览器在处理JSON解析方面效率较高。
  • 代码简洁: 直接利用了jsonb字段的原始JSON字符串形式,逻辑更直观。
  • 减少数据转换: 最小化了数据在不同表示形式之间的转换次数。

注意事项:

  • 数据量: 这种方法对于中等规模的数据集非常有效。如果从数据库中查询的jsonb记录数量非常庞大,导致最终拼接的JSON字符串过长,可能会对PHP的内存使用和JavaScript的解析性能造成压力。对于超大数据量,考虑使用分页、流式传输或API接口返回JSON等更高级的策略。
  • 错误处理: 在实际应用中,需要对数据库查询和结果处理进行充分的错误检查。例如,检查$res是否有效,pg_fetch_object是否成功等。
  • SQL注入风险: 确保数据库查询语句是通过参数化查询或ORM构建的,以防止SQL注入攻击。本教程中的$db->select('drone001')是一个简化示例,实际应用中应遵循安全实践。
  • PHP pg_fetch_object: 确保pg_fetch_object返回的对象属性data确实包含了jsonb字段的原始字符串值。在某些PHP-PostgreSQL驱动或配置下,jsonb字段可能会被自动转换为PHP数组或对象,此时需要调整获取数据的方式(例如,使用pg_fetch_array并指定适当的模式,或在SQL查询中使用::text进行显式类型转换,确保得到字符串)。

5. 总结

当处理PostgreSQL jsonb字段中的JSON数据并将其传递到JavaScript时,最有效的方法是避免在PHP中进行不必要的JSON解码和编码。通过在PHP中直接拼接从数据库获取的JSON字符串,并构建成一个完整的JSON数组字符串,可以显著提高数据传输效率,减少服务器端负载。这种方法利用了jsonb数据类型本身就是有效JSON字符串的特点,将最终的JSON解析任务高效地交由客户端JavaScript处理。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
数据分析工具有哪些
数据分析工具有哪些

数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

707

2023.10.12

SQL中distinct的用法
SQL中distinct的用法

SQL中distinct的语法是“SELECT DISTINCT column1, column2,...,FROM table_name;”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

327

2023.10.27

SQL中months_between使用方法
SQL中months_between使用方法

在SQL中,MONTHS_BETWEEN 是一个常见的函数,用于计算两个日期之间的月份差。想了解更多SQL的相关内容,可以阅读本专题下面的文章。

350

2024.02.23

SQL出现5120错误解决方法
SQL出现5120错误解决方法

SQL Server错误5120是由于没有足够的权限来访问或操作指定的数据库或文件引起的。想了解更多sql错误的相关内容,可以阅读本专题下面的文章。

1222

2024.03.06

sql procedure语法错误解决方法
sql procedure语法错误解决方法

sql procedure语法错误解决办法:1、仔细检查错误消息;2、检查语法规则;3、检查括号和引号;4、检查变量和参数;5、检查关键字和函数;6、逐步调试;7、参考文档和示例。想了解更多语法错误的相关内容,可以阅读本专题下面的文章。

360

2024.03.06

oracle数据库运行sql方法
oracle数据库运行sql方法

运行sql步骤包括:打开sql plus工具并连接到数据库。在提示符下输入sql语句。按enter键运行该语句。查看结果,错误消息或退出sql plus。想了解更多oracle数据库的相关内容,可以阅读本专题下面的文章。

819

2024.04.07

sql中where的含义
sql中where的含义

sql中where子句用于从表中过滤数据,它基于指定条件选择特定的行。想了解更多where的相关内容,可以阅读本专题下面的文章。

581

2024.04.29

sql中删除表的语句是什么
sql中删除表的语句是什么

sql中用于删除表的语句是drop table。语法为drop table table_name;该语句将永久删除指定表的表和数据。想了解更多sql的相关内容,可以阅读本专题下面的文章。

423

2024.04.29

俄罗斯Yandex引擎入口
俄罗斯Yandex引擎入口

2026年俄罗斯Yandex搜索引擎最新入口汇总,涵盖免登录、多语言支持、无广告视频播放及本地化服务等核心功能。阅读专题下面的文章了解更多详细内容。

134

2026.01.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 9.9万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 11.2万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 0.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号