本教程旨在解决python脚本向php返回多条json数据时遇到的常见问题。通过优化python脚本,将所有数据封装成一个完整的json数组输出,并在php端进行两阶段解码,即先解码整体json数组,再循环解码数组中的每个json字符串为关联数组,确保数据结构清晰、易于处理。
在开发Web应用时,我们经常需要利用Python处理复杂逻辑或数据,并通过PHP前端来调用并展示结果。一个常见的场景是Python脚本生成多条数据记录,每条记录以JSON格式表示,然后将其返回给PHP。然而,如果Python脚本只是简单地在循环中打印每个JSON对象,PHP接收到的将是一个由多个JSON字符串拼接而成的非标准字符串,导致PHP的json_decode函数无法正确解析。
原始的问题在于Python脚本在循环内部多次调用print(json.dumps(data)),导致每次迭代都输出一个独立的JSON字符串。当PHP通过shell_exec捕获这些输出时,它们被连接成一个单一的长字符串,例如:
{"key": "SWAT-107", "assignee": "Unassigned"} {"key": "SWAT-98", "assignee": "Unassigned"} ...这个字符串不是一个有效的JSON数组或对象,因此PHP的json_decode无法将其解析为一个可操作的数据结构。即使尝试将Python输出改为一个包含JSON字符串的Python列表,PHP接收到的仍然是一个字符串表示的列表,例如['{"key": ...}', '{"key": ...}'],这也不是一个标准的JSON格式。
解决此问题的关键在于确保Python脚本的最终输出是一个完整且标准的JSON结构,通常是一个JSON数组。这意味着我们需要在Python脚本中收集所有要返回的数据,然后一次性将整个数据结构序列化为JSON字符串并打印出来。
具体步骤如下:
以下是优化后的Python脚本示例:
import json
# 假设 Jira 类和 get_fields, get_jql_search_issues 方法已定义
# from PyJira.Jira import Jira
if __name__ == "__main__":
# jira = Jira() # 假设 Jira 实例已创建
output_data_list = [] # 用于存储所有数据字典的列表
# 模拟获取Jira问题数据
# fields = jira.get_fields()
# jql_issues = jira.get_jql_search_issues(jql_search="project = SWAT AND resolution = Unresolved ORDER BY priority DESC, updated DESC")
# 模拟一些问题数据
jql_issues = [
type('obj', (object,), {'key': 'SWAT-107', 'fields': type('obj', (object,), {'assignee': type('obj', (object,), {'display_name': 'Unassigned'})})})(),
type('obj', (object,), {'key': 'SWAT-98', 'fields': type('obj', (object,), {'assignee': type('obj', (object,), {'display_name': 'Unassigned'})})})(),
type('obj', (object,), {'key': 'SWAT-100', 'fields': type('obj', (object,), {'assignee': type('obj', (object,), {'display_name': 'Admin'})})})(),
]
for issue in jql_issues:
data_item = {}
data_item['key'] = issue.key
# 假设 assignee 字段可能为空
assignee_name = issue.fields.assignee.display_name if issue.fields.assignee else "Unassigned"
data_item['assignee'] = assignee_name
output_data_list.append(data_item) # 将字典添加到列表
# 将整个列表序列化为JSON数组字符串并打印
print(json.dumps(output_data_list))
# exit
() # 通常不需要在脚本末尾显式调用 exit()现在,Python脚本的输出将是一个标准的JSON数组,例如:
[{"key": "SWAT-107", "assignee": "Unassigned"}, {"key": "SWAT-98", "assignee": "Unassigned"}, {"key": "SWAT-100", "assignee": "Admin"}]当Python脚本按照上述方式优化后,PHP通过shell_exec接收到的将是一个有效的JSON数组字符串。PHP端的处理将分为两个阶段:
以下是PHP端的处理示例:
Jira Issues:";
foreach ($decoded_output as $jira_item_object) {
// 第二次解码:将每个PHP对象(代表一个Jira问题)转换为关联数组
// 'true' 参数确保将对象转换为关联数组
$jira_data = (array) $jira_item_object; // 或者 json_decode(json_encode($jira_item_object), true); 更通用但稍慢
// 检查是否成功转换为数组且包含预期的键
if (is_array($jira_data) && isset($jira_data['key']) && isset($jira_data['assignee'])) {
echo "Key: " . htmlspecialchars($jira_data['key']) . " - Assignee: " . htmlspecialchars($jira_data['assignee']) . "
";
} else {
echo "Invalid item structure encountered.
";
}
}
?>代码说明:
通过遵循这些实践,您可以有效地在Python和PHP之间传递复杂的JSON数据结构,实现健壮可靠的跨语言通信。
# php
# python
# html
# js
# 前端
# json
# 编码
# app
# ai
# nas
# 虚拟环境
# 常见问题
# 环境配置
相关文章:
无锡营销型网站制作公司,无锡网选车牌流程?
,石家庄四十八中学官网?
免费制作海报的网站,哪位做平面的朋友告诉我用什么软件做海报比较好?ps还是cd还是ai这几个软件我都会些我是做网页的?
一键制作网站软件下载安装,一键自动采集网页文档制作步骤?
如何通过wdcp面板快速创建网站?
商务网站制作工程师,从哪几个方面把握电子商务网站主页和页面的特色设计?
如何用虚拟主机快速搭建网站?详细步骤解析
宝塔Windows建站如何避免显示默认IIS页面?
如何优化Golang Web性能_Golang HTTP服务器性能提升方法
微信小程序制作网站有哪些,微信小程序需要做网站吗?
创业网站制作流程,创业网站可靠吗?
如何使用Golang table-driven基准测试_多组数据测量函数效率
成都响应式网站开发,dw怎么把手机适应页面变成网页?
mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?
兔展官网 在线制作,怎样制作微信请帖?
公司网站制作价格怎么算,公司办个官网需要多少钱?
制作网站哪家好,cc、.co、.cm哪个域名更适合做网站?
如何规划企业建站流程的关键步骤?
建站之星客服服务时间及联系方式如何?
网站专业制作公司有哪些,做一个公司网站要多少钱?
北京网站制作网页,网站升级改版需要多久?
简历在线制作网站免费,免费下载个人简历的网站是哪些?
企业网站制作费用多少,企业网站空间一般需要多大,费用是多少?
建站之星logo尺寸如何设置最合适?
Swift中swift中的switch 语句
相册网站制作软件,图片上的网址怎么复制?
在线教育网站制作平台,山西立德教育官网?
建站之星IIS配置教程:代码生成技巧与站点搭建指南
建站之星安装后如何自定义网站颜色与字体?
c# 服务器GC和工作站GC的区别和设置
如何在服务器上配置二级域名建站?
网站设计制作公司地址,网站建设比较好的公司都有哪些?
免费网站制作appp,免费制作app哪个平台好?
建站之星各版本价格是多少?
建站之星CMS建站配置指南:模板选择与SEO优化技巧
唐山网站制作公司有哪些,唐山找工作哪个网站最靠谱?
整人网站在线制作软件,整蛊网站退不出去必须要打我是白痴才能出去?
企业宣传片制作网站有哪些,传媒公司怎么找企业宣传片项目?
如何在云主机上快速搭建网站?
网站企业制作流程,用什么语言做企业网站比较好?
购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?
官网建站费用明细查询_企业建站套餐价格及收费标准指南
如何快速搭建二级域名独立网站?
如何通过VPS建站实现广告与增值服务盈利?
微信小程序 input输入框控件详解及实例(多种示例)
微课制作网站有哪些,微课网怎么进?
大型企业网站制作流程,做网站需要注册公司吗?
矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?
北京网站制作的公司有哪些,北京白云观官方网站?
专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?
*请认真填写需求信息,我们会在24小时内与您取得联系。