最近要整一些报文测试的事情,可当前项目的请求报文格式却不统一,有XML也有JSON,为了一致性,决定统一用JSON格式处理。

xmltodict : Makes working with XML feel like you are working with JSON

1.xml转json

import xmltodict
import json dic = xmltodict.parse("""<mydocument has="an attribute">
<and>
<many>elements</many>
<many>more elements</many>
</and>
<plus a="complex">
element as well
</plus>
</mydocument>""") dic1 = xmltodict.parse("""<?xml version="1.0" encoding="UTF-8"?>
<root>
<object name="input">
<field name="credit_ccy_code" value="USD"/>
<field name="credit_acct_no" value="991200001030"/>
<field name="credit_acct_name" value="Test_PA"/>
<field name="base_exch_rate" value=""/>
<field name="cheque_acct_name" value=""/>
<field name="summary_code" value=""/>
<field name="forward_cheque_ind" value=""/>
<field name="elec_cheque_ind" value=""/>
<field name="cheque_amt" value=""/>
<field name="cheque_ccy" value=""/>
<field name="trxn_date" value="20170110"/>
<field name="cheque_bank_code" value=""/>
<field name="customer_remark" value=""/>
<field name="commercial_bank_name" value=""/>
<field name="exch_rate" value=""/>
<field name="forex_agree_price_id" value=""/>
<field name="start_inst_date" value=""/>
<field name="cheque_no" value=""/>
<field name="trxn_remark" value=""/> <array name="list01" length="1">
<object name="">
<field name="base_exch_rate" value="0.00000"/>
<field name="cheque_acct_name" value=""/>
<field name="summary_code" value="CSD"/>
<field name="forward_cheque_ind" value="N"/>
<field name="elec_cheque_ind" value="N"/>
<field name="cheque_amt" value="1000.00"/>
<field name="cheque_bank_code" value="BOC_MAC"/>
<field name="cheque_ccy" value="USD"/>
<field name="id" value="1"/>
<field name="customer_remark" value=""/>
<field name="commercial_bank_name" value=""/>
<field name="exch_rate" value="0.00000"/>
<field name="forex_agree_price_id" value=""/>
<field name="start_inst_date" value="20170110"/>
<field name="cheque_no" value="ZSBANK20170001"/>
<field name="trxn_remark" value=""/>
<field name="cheque_acct_no" value=""/>
<field name="collection_check_type" value="FC"/>
</object></array> <field name="cheque_acct_no" value=""/>
<field name="collection_check_type" value=""/>
</object> <object name="comm_req">
<field name="auto_chrg_info" value=""/>
<field name="page_size" value="20"/>
<field name="busi_seq" value=""/>
<field name="session_id" value=""/>
<field name="agent_org_id" value=""/>
<field name="recon_code" value=""/>
<field name="busi_org_id" value="99"/>
<field name="total_count" value=""/>
<field name="channel_id" value="101"/>
<field name="initiator_date" value="20170110"/>
<field name="page_start" value="0"/>
<field name="busi_branch_id" value="99101"/>
<field name="chrg_confirm_ind" value=""/>
<field name="over_time" value=""/>
<field name="ip_address" value="10.18.21.27"/>
<field name="expect_date" value="20170110"/>
<field name="initiator_system" value="100"/>
<field name="role_collection" value="ROLE0004,ROLE0007,ROLE0010,@99101"/>
<field name="busi_teller_id" value="99101888"/>
<field name="sponsor_system" value="100"/>
<array name="auth_reason" length="0"/>
<field name="auth_ind" value=""/>
<field name="auth_user_id" value=""/>
<field name="branch_id" value="99101"/>
</object> <object name="sys">
<field name="prcscd" value="20211"/>
<field name="bizSysSrvId" value=""/>
</object>
</root>""") print (json.dumps(dic,indent=4))
print '----------'
print (json.dumps(dic1))

输出:

{
"mydocument": {
"@has": "an attribute",
"and": {
"many": [
"elements",
"more elements"
]
},
"plus": {
"@a": "complex",
"#text": "element as well"
}
}
}
-------
{"root": {"object": [{"@name": "input", "field": [{"@name": "credit_ccy_code", "@value": "USD"}, {"@name": "credit_acct_no", "@value": ""}, {"@name": "credit_acct_name", "@value": "Test_PA"}, {"@name": "base_exch_rate", "@value": ""}, {"@name": "cheque_acct_name", "@value": ""}, {"@name": "summary_code", "@value": ""}, {"@name": "forward_cheque_ind", "@value": ""}, {"@name": "elec_cheque_ind", "@value": ""}, {"@name": "cheque_amt", "@value": ""}, {"@name": "cheque_ccy", "@value": ""}, {"@name": "trxn_date", "@value": ""}, {"@name": "cheque_bank_code", "@value": ""}, {"@name": "customer_remark", "@value": ""}, {"@name": "commercial_bank_name", "@value": ""}, {"@name": "exch_rate", "@value": ""}, {"@name": "forex_agree_price_id", "@value": ""}, {"@name": "start_inst_date", "@value": ""}, {"@name": "cheque_no", "@value": ""}, {"@name": "trxn_remark", "@value": ""}, {"@name": "cheque_acct_no", "@value": ""}, {"@name": "collection_check_type", "@value": ""}], "array": {"@name": "list01", "@length": "", "object": {"@name": "", "field": [{"@name": "base_exch_rate", "@value": "0.00000"}, {"@name": "cheque_acct_name", "@value": ""}, {"@name": "summary_code", "@value": "CSD"}, {"@name": "forward_cheque_ind", "@value": "N"}, {"@name": "elec_cheque_ind", "@value": "N"}, {"@name": "cheque_amt", "@value": "1000.00"}, {"@name": "cheque_bank_code", "@value": "BOC_MAC"}, {"@name": "cheque_ccy", "@value": "USD"}, {"@name": "id", "@value": ""}, {"@name": "customer_remark", "@value": ""}, {"@name": "commercial_bank_name", "@value": ""}, {"@name": "exch_rate", "@value": "0.00000"}, {"@name": "forex_agree_price_id", "@value": ""}, {"@name": "start_inst_date", "@value": ""}, {"@name": "cheque_no", "@value": "ZSBANK20170001"}, {"@name": "trxn_remark", "@value": ""}, {"@name": "cheque_acct_no", "@value": ""}, {"@name": "collection_check_type", "@value": "FC"}]}}}, {"@name": "comm_req", "field": [{"@name": "auto_chrg_info", "@value": ""}, {"@name": "page_size", "@value": ""}, {"@name": "busi_seq", "@value": ""}, {"@name": "session_id", "@value": ""}, {"@name": "agent_org_id", "@value": ""}, {"@name": "recon_code", "@value": ""}, {"@name": "busi_org_id", "@value": ""}, {"@name": "total_count", "@value": ""}, {"@name": "channel_id", "@value": ""}, {"@name": "initiator_date", "@value": ""}, {"@name": "page_start", "@value": ""}, {"@name": "busi_branch_id", "@value": ""}, {"@name": "chrg_confirm_ind", "@value": ""}, {"@name": "over_time", "@value": ""}, {"@name": "ip_address", "@value": "10.18.21.27"}, {"@name": "expect_date", "@value": ""}, {"@name": "initiator_system", "@value": ""}, {"@name": "role_collection", "@value": "ROLE0004,ROLE0007,ROLE0010,@99101"}, {"@name": "busi_teller_id", "@value": ""}, {"@name": "sponsor_system", "@value": ""}, {"@name": "auth_ind", "@value": ""}, {"@name": "auth_user_id", "@value": ""}, {"@name": "branch_id", "@value": ""}], "array": {"@name": "auth_reason", "@length": ""}}, {"@name": "sys", "field": [{"@name": "prcscd", "@value": ""}, {"@name": "bizSysSrvId", "@value": ""}]}]}}

2.json转xml

import xmltodict

dicts = {
"sys":{
"prcscd":"",
"error_id":1
},
"input":{
"list01":[],
"credit_ccy_code":1,
"credit_acct_no":1,
"credit_acct_name":1,
"credit_acct_type":1,
"credit_prod_id":1,
"act_dept_amt":1,
"passbook_no":1,
"passbook_balance":1
},
"comm_req":{
"busi_org_id":1,
"channel_id":1,
"trxn_seq":1,
"busi_seq":1,
"sponsor_system":1,
"initiator_system":1,
"initiator_date":1,
"recon_code":1,
"busi_teller_id":1,
"busi_branch_id":1,
"expect_date":1,
"agent_org_id":1,
"session_id":1,
"ip_address":1,
"over_time":1,
"page_size":1,
"page_start":1,
"total_count":1,
"auth_ind":1,
"auth_user_id":1,
"auto_chrg_method":1,
"chrg_confirm_ind":1,
"auto_chrg_info":{
"semi_auto_chrg_ind":1,
"cash_trxn_ind":1,
"chrg_asso_obj_type":1,
"cust_no":1,
"acct_no":1,
"ccy_code":1,
"trxn_amt":1,
"quantity":1,
"deduct_chrg_acct":1,
"deduct_chrg_ccy":1,
"deduct_sub_acct_seq":1,
"summary_code":1,
"paid_ind":1,
"charge_details":[]
},
"role_collection":1,
"external_scene_code":1,
"warning_confirm_ind":1,
"ince_id":1
}
} dicts = {'root':dicts} #若没有会报错 Document must have exactly one root
print (xmltodict.unparse(dicts,pretty = True))

输出:

<?xml version="1.0" encoding="utf-8"?>
<root>
<sys>
<error_id>1</error_id>
<prcscd>2211</prcscd>
</sys>
<input>
<passbook_no>1</passbook_no>
<credit_acct_type>1</credit_acct_type>
<act_dept_amt>1</act_dept_amt>
<passbook_balance>1</passbook_balance>
<credit_acct_name>1</credit_acct_name>
<credit_ccy_code>1</credit_ccy_code>
<credit_acct_no>1</credit_acct_no>
<credit_prod_id>1</credit_prod_id>
</input>
<comm_req>
<initiator_date>1</initiator_date>
<trxn_seq>1</trxn_seq>
<busi_org_id>1</busi_org_id>
<sponsor_system>1</sponsor_system>
<warning_confirm_ind>1</warning_confirm_ind>
<chrg_confirm_ind>1</chrg_confirm_ind>
<auth_ind>1</auth_ind>
<role_collection>1</role_collection>
<auto_chrg_info>
<summary_code>1</summary_code>
<cust_no>1</cust_no>
<ccy_code>1</ccy_code>
<acct_no>1</acct_no>
<deduct_chrg_ccy>1</deduct_chrg_ccy>
<deduct_sub_acct_seq>1</deduct_sub_acct_seq>
<chrg_asso_obj_type>1</chrg_asso_obj_type>
<trxn_amt>1</trxn_amt>
<deduct_chrg_acct>1</deduct_chrg_acct>
<semi_auto_chrg_ind>1</semi_auto_chrg_ind>
<paid_ind>1</paid_ind>
<cash_trxn_ind>1</cash_trxn_ind>
<quantity>1</quantity>
</auto_chrg_info>
<page_size>1</page_size>
<agent_org_id>1</agent_org_id>
<expect_date>1</expect_date>
<page_start>1</page_start>
<ince_id>1</ince_id>
<initiator_system>1</initiator_system>
<over_time>1</over_time>
<busi_branch_id>1</busi_branch_id>
<external_scene_code>1</external_scene_code>
<busi_teller_id>1</busi_teller_id>
<ip_address>1</ip_address>
<auth_user_id>1</auth_user_id>
<recon_code>1</recon_code>
<total_count>1</total_count>
<auto_chrg_method>1</auto_chrg_method>
<session_id>1</session_id>
<busi_seq>1</busi_seq>
<channel_id>1</channel_id>
</comm_req>
</root>

xml与json格式互转的更多相关文章

  1. 【.net 深呼吸】聊聊WCF服务返回XML或JSON格式数据

    有时候,为了让数据可以“跨国经营”,尤其是HTTP Web有关的东东,会将数据内容以 XML 或 JSON 的格式返回,这样一来,不管客户端平台是四大文明古国,还是处于蒙昧时代的原始部落,都可以使用这 ...

  2. java XML转JSON格式

    标签: XML转Json json 2014-05-20 20:55 6568人阅读 评论(6) 收藏 举报  分类: [J2SE基础](20)  代码如下所示,从这个例子中发现了代码库的重要性,如果 ...

  3. .net WebAPI返回xml、json格式

    WebAPI返回xml.json格式简单示例 using System.Net.Http.Formatting; public class TestController : ApiController ...

  4. 发送xml或json格式的数据给服务器

    后台通过context.Request.InputStream来接收 #region 发送消息 + void SendMessage() /// <summary> /// 发送消息 // ...

  5. Ajax中XML和JSON格式的优劣比较

    刚做完一个小的使用Ajax的项目.整个小项目使用JavaScript做客户端,使用PHP做服务器端.利用xmlHttpRequest组件作为交互工具,利用XML作为数据传输的格式.做完后基本做一个简单 ...

  6. 使用CJSON库实现XML与JSON格式的相互转化

    之前完成了一个两个平台对接的项目.由于这两个平台一个是使用json格式的数据,一个是使用xml格式的数据,要实现它们二者的对接就涉及到这两个数据格式的转化,在查阅相关资料的时候发现了这个CJSON库, ...

  7. xml转换为json格式时,如何将指定节点转换成数组 Json.NET

    使用Json.NET转换xml成json时,如果xml只有单个节点,但json要求是数组形式[], JsonConvert.SerializeXmlNode 并不能自动识别 示例如下: RecordA ...

  8. xml和JSON格式相互转换的Java实现

    依赖的包: json-lib-2.4-jdk15.jar ezmorph-1.0.6.jar xom-1.2.1.jar commons-lang-2.1.jar commons-io-1.3.2.j ...

  9. SpringBoot RestController 同时支持返回xml和json格式数据

    @RestController 默认支持返回json格式数据,即使不做任何配置也能返回json数据 当接口需要支持xml或json两种格式数据时应该怎么做呢? 只要引入 Jackson xml的 ma ...

随机推荐

  1. 神经网络中的激活函数——加入一些非线性的激活函数,整个网络中就引入了非线性部分,sigmoid 和 tanh作为激活函数的话,一定要注意一定要对 input 进行归一话,但是 ReLU 并不需要输入归一化

    1 什么是激活函数? 激活函数,并不是去激活什么,而是指如何把“激活的神经元的特征”通过函数把特征保留并映射出来(保留特征,去除一些数据中是的冗余),这是神经网络能解决非线性问题关键. 目前知道的激活 ...

  2. Battle City

    Battle City Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7208   Accepted: 2427 Descr ...

  3. Node.js:目录

    ylbtech-Node.js:目录 1.返回顶部   2.返回顶部   3.返回顶部   4.返回顶部   5.返回顶部 1. http://www.runoob.com/nodejs/nodejs ...

  4. 自己实现的一个 .net 缓存类(原创)

    public class CacheContainer { private static Hashtable ht = new Hashtable(); /// <summary> /// ...

  5. .NET中使用反射访问属性方法

    .net所编写的程序集包含两个重要部分:IL(中间语言代码) 和metadata(元数据).我们编写的代码中不是有很多很多的类吗,类有很多很多的成员,在编译代码的时候,元数据表就根据代码把类的所有信息 ...

  6. 从实现HTML页面局部刷新到JSONP

    也可以用iframe方法发get请求,但是目前iframe基本已经被弃用,所以此处就不介绍这个方法. 方案一:用图片造 get 请求 button.addEventListener('click', ...

  7. 2-SAT 小结

    PS:今天(2014.10.27)准备PPT,明天在组合数学课上与大家一起分享一下2-SAT.我以为是一件简单的事情.但是,当我看了自己这篇博客以后,发现居然还是不懂.很多资料不全,也没仔细讲.整理了 ...

  8. 谈谈c++中继承中的虚函数

      c++继承中的虚函数 c++是一种面向对象的编程语言的一个很明显的体现就是对继承机制的支持,c++中继承分很多种,按不同的分类有不同分类方法,比如可以按照基类的个数分为多继承和单继承,可以按照访问 ...

  9. C-Store论文阅读笔记

    C-Store论文由今年的图灵奖获得者Mike Stonebraker提出来,整体架构在数据库领域相当不错.数据库采用读写分开存的架构,只写块的数据定期会和只读块儿的数据进行合并,产生新的只读块儿.而 ...

  10. PowerDesigner 逆向工程 Could not Initialize JavaVM!

    原项目的大量的表,使用PowerDesigner 进行逆向工程.提示Could not Initialize JavaVM! 网上找到原因,PowerDesigner 不可以使用64位JDK环境! 有 ...