可配置且可记录的Json转换和映射

piri的Python项目详细描述


皮里

可配置的凡人数据映射


testcodecovPython Versionwemake-python-styleguide


文档 (Stable| Latest)| Source Code| Task Tracker

皮里是什么

Piri是一个JSON到JSON的映射器。这意味着我们读取输入JSON并创建输出JSON。如何创建输出取决于配置文件中的说明。配置文件控制输出结构,并告诉piri在输入中的哪个位置查找数据,以及将数据放入输出的位置。此外,Piri还支持使用data castingif conditionscombination of data from multiple places以及设置default值的数据转换。在

这使您能够将任何输入更改为所需的输出。

典型用例

  • GET来自api的数据,但需要为后端系统转换数据
  • POST将数据传输到需要与系统生成格式不同的数据的api
  • 你所有的后台都说不同的语言?通过Piri将其导入
  • 客户提供奇怪格式的数据?使用Piri使其性感
  • 但是JSON需要很好的CSV结构吗?将CSV生成一个JSON列表,并使用Piri对其进行转换
  • 有XML但需要更改吗?将其转换为JSON,使用Piri将其转换为XML,然后再次将其转储为XML。在
  • 客户旧系统需要CSV。使用Piri将结构良好的JSON数据转换为可以轻松转储到CSV的JSON列表

官方开放Piri解决方案

piri-cli,文件到文件映射的命令行接口。在

piri-web,一键部署用于Piri JSON映射的Web REST API。在

企业解决方案

来了。。。在

目标

这个库的目标是使JSON到JSON的转换/映射变得简单、可配置和可记录。我们通过使用一个简单但功能丰富的JSON配置来实现这一点,JSON配置还可以作为文档和双方之间的契约。在

为什么

皮里出生是因为我们真的不喜欢地图绘制。记录代码中所做的任何决定,以便产品所有者理解它也是no me gusto。将数据从一种格式转换成另一种格式是软件工程师每天最常做的事情。。。应该很容易!你不必担心记录下来。在

在经历了历史上最糟糕的POC之后,我们再也不想通过脚本和代码进行映射了。这就产生了这样一种想法:应该可以创建一个文件来管理结构的外观以及数据应该如何转换。这将是single source of truth,通过Piri我们已经实现了这一点。在

我们相信这将使团队之间的协作更快更容易。使用Piri来协调前端和后端之间的数据格式。在第三方系统和后端之间。您甚至可以使用Piri来测试现有的集成;-)

特点

  • 使用配置文件映射。在
  • JSON Schema配置文件的验证。在
  • 结构转换JSON
  • 将多个值合并为一个。在
  • 默认值
  • If语句
    • 是,包含,不是
  • 铸造
    • 整数、十进制、iso日期

贡献

请参见contribute

安装

包在pypi上。使用pip或诗歌安装

pip install piri
^{pr2}$

简介

看看我们的入门课程here

快速启动

importsimplejsonfrompiri.processimportprocessmy_config={'name':'schema','array':False,'objects':[{'name':'invoices','array':True,'iterables':[{'alias':'invoices','path':['root','invoices'],},],'attributes':[{'name':'amount','mappings':[{'path':['invoices','amount'],},],'casting':{'to':'decimal','original_format':'integer_containing_decimals',},'default':0,},{'name':'debtor','mappings':[{'path':['root','customer','first_name'],},{'path':['root','customer','last_name'],},],'separator':' ',},],'objects':[],},],}example_data={'root':{'customer':{'first_name':'John','last_name':'Smith',},'invoices':[{'amount':10050,},{'amount':20050,},{'amount':-15005,},],},}mapped_data=process(example_data,my_config)withopen('resultfile.json','w')asoutput_file:output_file.write(simplejson.dumps(mapped_data))

内容结果文件.json在

{"invoices":[{"amount":100.5,"debtor":"John Smith"},{"amount":200.5,"debtor":"John Smith"},{"amount":-150.05,"debtor":"John Smith"}]}

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Jetty是否有请求缓存?   数组中的java 2值与我的数据帧中的2列对应   对象序列化期间的java DbUtils类型转换问题   java根面板中不显示所有单独的面板   java通过代理或SSH隧道连接Hbase API   java困惑:与经典MVC控制器相比,JSF2中bean的角色   java在我的Triangle类中“找不到符号错误”   java在Android中设置从路径到自定义按钮的图像   java不绕轨道旋转椭圆   AES在socket上搞砸了序列化/反序列化。无效的流标头。JAVA   java在数组中搜索term和if语句   线程“main”java中出现异常。util。正则表达式。PatternSyntaxException:在索引0附近悬挂元字符“*”*   Websphere上的java Google反射无法打开url连接   java为什么inc/dec频道什么都不做?   java KeyListener无法访问keyPressed方法