项目实战之跨语言调用api——结合语言优点解决实际问题

前情提要

在一个项目开发中需要后端解析并分析数据得出结果报告,一开始用的Java后端,后面一堆Json数据解析的实在头疼,于是捡起老胶水:Python 辅助开发作为后端的核心算法部分服务接口

Java:SpringBoot 结合 RestTemplate 调用服务接口

后端解析完数据通过RestTemplate发送http请求

Python:如何解析到手的嵌套Json数据

这一串又臭又长的Json数据结构是这样的:数组元素是Json对象,对象中又有元素项是数组,数组中管理的又有是对象的存在。简述就是数组对象俄罗斯套娃,需求又是拿到里面的一两个元素项下的值,下面是一小段数据例子

[{'desc': 'https://special-item-501508.framer.app/', 'deviceGroupId': 1, 'envAttr': {'browser': {'displayName': 'Browser', 'order': '11', 'value': 'Chrome'}, 'city': {'displayName': 'City', 'order': '4', 'value': 'Tucheng'}, 'country': {'displayName': 'Country or Region', 'order': '2', 'value': 'China'}, 'deviceType': {'displayName': 'Device Type', 'order': '18', 'value': 'PC'}, 'displayHeight': {'displayName': 'Screen Height', 'order': '13', 'value': 2234}, 'displayWidth': {'displayName': 'Screen Width', 'order': '12', 'value': 3456}, 'ip': {'displayName': 'IP', 'order': '1', 'value': '103.156.242.195'}, 'operatingSystem': {'displayName': 'OS', 'order': '9', 'value': 'Mac'}, 'province': {'displayName': 'Province', 'order': '3', 'value': 'Taipei'},  ..... 'pageAttr': {'clientCreateTs': {'displayName': '', 'value': 1701427202179}, 'libVersion': {'displayName': 'SDK Version', 'order': '22', 'value': '1.4.0'}, 'referrer': {'displayName': 'Previous URL', 'order': '15', 'value': 'https://framer.com/'}, 'referrerHost': {'displayName': 'Previous Domain', 'order': '16', 'value': 'framer.com'}, 'sdkType': {'displayName': 'SDK Type', 'order': '21', 'value': 'WEB'}, 'sessionId': {'displayName': '', 'order': '', 'value': 877}, 'title': {'displayName': 'Page Title', 'order': '10', 'value': 'SaaS Template'}, 'uri': {'displayName': 'Page URI', 'order': '12', 'value': 'https://special-item-501508.framer.app/'}, 'url': {'displayName': 'Page URL', 'order': '11', 'value': 'https://special-item-501508.framer.app/'}, 'urlHost': {'displayName': 'Page Domain', 'order': '13', 'value': 'special-item-501508.framer.app'}, 'urlPath': {'displayName': 'Page Path', 'order': '14', 'value': '/'}}, ...}

这一段给Java解析想想我都头疼,这时候就想起了这门“很随便”的语言:Python。解析数据的代码如下

@app.route('/reslove_json', methods=['POST'])
def reslove_json():data = request.jsonprint(data)if data:# 遍历data数组for item in data:print(f"'desc': {item['desc']}")# 如果数组元素中存在'envAttr'if 'envAttr' in item:envAttr = item['envAttr']print(f"'browser': {envAttr.get('browser')}")return jsonify({'code': '200', 'msg': '请求成功!', 'data': 'succeed'})

运行结果如下

 

拓展

如果Json数据对象格式不统一,又该怎么办呢?下面代码给出示例:

data = [  {  "id": 1,  "obj": {  "name": "John Doe",  "age": 30  }  },  {  "id": 2,  "details": {  "name": "Jane Doe",  "age": 25  }  }  
]  # 使用列表推导来获取所有的'name'值  
names = [item['obj'].get('name', None) if 'obj' in item else item['details'].get('name', None) for item in data]  # 上面列表推导式等同于以下代码
for item in data:if 'obj' in item:name = item['obj'].get('name', None);elsename = item['details'].get('name', None);print(names)

遍历data列表中的每个字典对象。对于每个对象,我们检查它是否包含obj键,如果包含,我们就从obj字典中获取name的值;如果不包含obj键但包含details键,我们就从details字典中获取name的值。如果name键不存在于任何子字典中,get方法将返回None

用列表推导式的一个优点是相比于for循环更高效,因为列表推导式在执行时调用的是Python的底层C代码,而for循环则是用Python代码来执行。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/733453.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Linux】Linux——Centos7安装

目录 虚拟机安装【空壳子】安装VMware Workstation新建虚拟机硬件兼容性(直接下一步)稍后安装操作系统客户及操作系统选择Linux,版本Centos764位给虚拟机命名,并选择安装位置处理器配置(默认即可,不够用后面可以调)虚拟…

Nexus Repository的搭建

一、前言 Nexus Repository用于管理maven的jar包。java开发程序员每天都在使用,但是自己搭建或者管理的就很少。除非你是系统架构师。因为这一套东西,基本是搭建一次就不需要人来搭建了,日后打开界面维护的机会也很少,我们只需要…

一元函数微分学——刷题(26

目录 1.题目:2.解题思路和步骤:3.总结:小结: 1.题目: 2.解题思路和步骤: 归纳求解,把指数写成负数就比较容易看出来规律 3.总结: 归纳求解,把指数写成负数就比较容易…

资产管理系统有哪些(一体化资产管理平台推荐)

企业资产管理系统是一种关键的工具,旨在帮助企业有效地管理和追踪其资产。 该系统利用计算机系统和相关软件,通过信息化、智能化的方式,对资产进行全面的可视化管理,从而提高管理效率、降低运营成本,并确保资产的安全…

Hadoop配置日志的聚集——jobhistory不显示任务问题

问题: 一开始job history是正常的,配置了日志的聚集以后不管做什么任务都不显示任务,hdfs是正常运行,而且根据配置步骤都重启过了。 下面先po出日志聚集的操作步骤,再讲问题 1.配置yarn-site.xml cd $HADOOP_HOME/e…

经典排序算法之快速排序|c++代码实现|什么是快速排序|如何代码实现快速排序

引言 排序算法c实现系列第6弹——快速排序 文章末尾还有本菜已实现的其他排序算法文章的链接。不过,排序算法这个系列还没更完,争取本周末搞完!之后还会有堆排序、桶排序等的代码实现,感兴趣的佳人可以点个赞&收藏&#xff…

Igraph入门指南 4

二、图的创建 图分有向图和无向图,所以图的创建有各自的实现方式。 1、手工创建图: 1-1 通过文本创建:graph_from_literal 通过每项提供两个顶点名(或ID号)作为一条边的格式,手动创建图,顶点…

【敬伟ps教程】文字处理工具

文章目录 文字工具使用方式文字图层文字工具选项字符面板段落面板文字工具使用方式 文字工具(快捷键T),包含横排和直排两种类型 创建文本两种类型:点式文本、段落文本 创建文字方式 1、在画面上单击,出现文字光标,可输入文字,然后需要在工具栏中点击“√”或者 Ctrl+…

数学建模-动态规划(美赛运用)

动态规划模型的要素是对问题解决的抽象,其可分为: 阶段。指对问题进行解决的自然划分。例如:在最短线路问题中,每进行走一步的决策就是一个阶段。 状态。指一个阶段开始时的自然状况。例如:在最短线路问题中&#xff…

docker 运行异构镜像

概述 关于docker镜像在不同的cpu架构下运行报错的解决办法,作者踩坑验证,在此分享经验 某次工作遇到需要银行内部部署docker镜像,由于行内已经开始走信创的路线,使用鲲鹏系统,arm架构,记过就遇到了standa…

ComfyUI-Flowty-TripoSR

这是一个自定义节点,可让您直接从ComfyUI使用TripoSR。TripoSR 是由 Tripo AI 和 Stability AI 合作开发的最先进的开源模型,用于从单个图像快速前馈 3D 重建。(TL;DR 它从图像创建 3d 模型。这篇文章主要介绍了将TripoSR作为ComfyUI节点的配…

华容道问题求解_详细设计(四)之查找算法2_BFS

(续上篇) 利用BFS查找,会找到最短路径(没有权重的图),这个道理比较简单,这是由于寻找路径的方法都是从起点或者接近起点的位置开始的。查找过程如果画出图来,类似于一圈圈的放大&…

Leetcode每日一题】 二维前缀和 - 矩阵区域和(难度⭐⭐)(31)

1. 题目解析 题目链接:1314. 矩阵区域和 题目乍一看很晦涩难懂,又是大于等于又是k的 仔细分析,题目所说的意思就是以[i,j]为中心,求上下左右向外拓展k个单位的矩阵和,放在名为answer的矩阵中,最后返回ans…

Session登陆实践

Session登陆实践 Session登录是一种常见的Web应用程序身份验证和状态管理机制。当用户成功登录到应用程序时,服务器会为其创建一个会话(session),并在会话中存储有关用户的信息。这样,用户在与应用程序交互的整个会话…

设计模式 代理模式

代理模式主要使用了 Java 的多态,主要是接口 干活的是被代理类,代理类主要是接活, 你让我干活,好,我交给幕后的类去干,你满意就成,那怎么知道被代理类能不能干呢? 同根就成&#xff…

档案室管理人员有哪些岗位

档案室管理人员的岗位可以分为以下几类: 1. 档案文书管理岗位:负责档案文书的管理、整理、归档和借阅工作,包括档案资料的分类、编目、装订、存储等。 2. 档案数字化管理岗位:负责将纸质档案数字化,进行扫描、转换、存…

mac下终端命令提示补全

欢迎来到我的博客,代码的世界里,每一行都是一个故事 mac下终端命令提示补全 前言Zsh-autosuggestions原理解析:智能提示的工作方式1. 命令历史分析:2. 智能提示生成:3. 用户交互和选择:4. 配置和个性化&…

Linux基础IO【 详 解 】

文章目录 C语言文件IOC语言文件接口汇总默认打开的三个流 系统文件IOopenclosewriteread 文件描述符fd文件描述符的分配规则重定向重定向的本质dup2 FILEFILE当中的文件描述符FILE当中的缓冲区 理解文件系统初识inode磁盘分区与格式化介绍 软硬链接软链接硬链接软硬链接的区别 …

CorelDRAW Graphics Suite2024专业图形设计软件Windows/Mac最新25.0.0.230版

CorelDRAW Graphics Suite 2024是一款专业的图形设计软件,它集成了CorelDRAW Standard 2024和其他高级图形处理工具,为用户提供了全面的图形设计和编辑解决方案。 该软件拥有强大的矢量编辑功能,用户可以轻松创建和编辑矢量图形,…

UI 易用性测试 以及自动化实现!

GUI 是指图形用户界面,UI 是指用户界面,对于纯软件系统,这两者没有本质的区别,GUI易用性测试与 UI 易用性测试内容一致。但是如果测试的对象是一个产品,这两者则存在区别,对于产品 UI 则不仅仅包括 GUI&…