<p>在测试开发过程中经常遇到各种存储格式的数据转换,前面也写了几篇小文。所以这里把它整合一下。</p>
<h3>一.python 下xml和dict相互转化,含attributes</h3>
<p>我们写测试用例或者配置文件很多都是用xml文件来存储,但是数据要在程序中被使用,还是拿dict来用比较方便,所以有必要掌握xml转换为dict的技巧。互转程序片段如下:</p>
<p>from lxml import etree</p>
<p>def dictlist(node):<br>
res = {}<br>
res[node.tag] = []<br>
xmltodict(node,res[node.tag])<br>
reply = {}<br>
reply[node.tag] = {'value':res[node.tag],'attributes':node.attrib}<br><br>
return reply</p>
<p>def xmltodict(node,res):<br>
rep = {}<br><br>
if len(node):<br>
#n = 0<br>
for n in list(node):<br>
rep[node.tag] = []<br>
value = xmltodict(n,rep[node.tag])<br>
if len(n):<br><br>
value = {'value':rep[node.tag],'attributes':n.attrib}<br>
#print value<br>
res.append({n.tag:value})<br>
else :<br>
#print rep[node.tag][0]<br>
res.append(rep[node.tag][0])<br><br>
else:<br>
value = {}<br>
value = {'value':node.text,'attributes':node.attrib}<br>
#print value<br>
res.append({node.tag:value})<br><br>
return <br>
def fromstring(strdict=None):<br>
root = etree.fromstring(strdict)<br>
return dictlist(root)</p>
<p>def parse(filename=None):<br>
tree = etree.parse(filename)<br>
return dictlist(tree.getroot())</p>
<p>
def main():<br>
tree = etree.parse('test.xml')<br>
print tree<br>
res = dictlist(tree.getroot())<br>
print res<br><br>
def dict2xml(d):<br>
from xml.sax.saxutils import escape<br>
def unicodify(o):<br>
if o is None:<br>
return u'';<br>
return unicode(o)<br>
lines = ["<?xml version=/"1.0/" encoding=/"utf-8/"?>"]<br>
def addDict(node, offset):<br>
for name, value in node.iteritems():<br>
if name == "attributes":<br>
strqq = lines[len(lines)-1]<br>
index = strqq.find(u"<")<br>
strqq = strqq[index+1:len(strqq)-1]<br>
for x,y in value.iteritems():<br>
strqq = strqq + u" " *4 + u"%s='%s'"%(x,y)<br>
lines[len(lines)-1] = u" " * index + u"<%s>"%(strqq)<br>
else:<br>
if isinstance(value, dict):<br>
lines.append(offset + u"<%s>" % name)<br>
addDict(value, offset + u" " * 4)<br>
lines.append(offset + u"</%s>" % name)<br>
elif isinstance(value, list):<br>
for item in value:<br>
if isinstance(item, dict):<br>
addDict(item, offset + u" " * 4)<br>
else:<br>
lines.append(offset + u"<%s>%s</%s>" % (name, escape(unicodify(item)), name))<br>
else:<br>
if value != "":<br>
pass<br>
addDict(d, u"")<br>
lines.append(u"")<br>
return u"/n".join(lines)</p>
<h3>二、利用jsoncpp将json字符串转换为Vector</h3>
<p></p>
<p>在API测试过程中经常会遇到传入参数为复杂类型,一般情况下在python下,习惯用字典来表示复杂类型。但是c++对字符串的处理是比较弱智的,一般
c++里边会用vector来存储复杂类型,那么就存在转换的问题,下面小段代码记录了将字符串转换为Vector的过程</p>
<p>待转换的字符串如下:</p>
<p>const char * jsongroupinfo="[{/"groupId/" :946838524,/"groupname/" :/"bababa/", /"mask/":1,/"parentid/":946755072}]";</p>
<p>转换程序片段</p>
<p> Json::Reader reader;<br>
Json::Value json_object;<br>
if (!reader.parse(jsongroupinfo, json_object))<br>
return "parse jsonstr error";<br>
SUserChggroup sucg;<br>
VECTOR< SUserChggroup > m_groupInfo;<br>
for(int i = 0; i < json_object.size(); i ++)<br>
{<br>
Json::Value &current = json_object[i];<br>
sucg.m_groupId = current["groupId"].asInt();<br>
sucg.m_groupName = current["groupname"].asString();<br>
sucg.m_mask = current["mask"].asInt();<br>
sucg.m_parentId = current["parentid"].asInt();<br>
m_groupInfo.push_back(sucg);<br>
}</p>
<p></p>
<h3 class="title_txt">三、python中将json字符串转换为dict</h3>
<p>首先要确认是否存在simplejson的类库,python2.6及以上版本默认自带,</p>
<p>python2.5需要到如下目录下载</p>
<p>http://pypi.python.org/packages/source/s/simplejson/simplejson-2.1.2.tar.gz#md5=a856f9ae9ab3749991a93ddeafadc554</p>
<p>接下来的代码如下</p>
<p>import simplejson</p>
<p>js = "{/"description/":/"fdsafsa/",/"order/":/"1/",/"place/":/"22
Plainsman Rd, Mississauga, ON,
Canada/",/"lat/":43.5969175,/"lng/":-79.7248744,/"locationDate/":/"03/24/2010/"},{/"description/":/"sadfdsa/",/"order/":/"2/",/"place/":/"50
Dawnridge Trail, Brampton, ON,
Canada/",/"lat/":43.7304774,/"lng/":-79.8055435,/"locationDate/":/"03/26/2010/"},"</p>
<p>simplejson.loads('[%s]' % js[:-1])</p>
<p>三行代码搞定,为什么python代码总是那么简单呢</p>
<p></p>
<p></p>
<p>可见python在处理结构化数据方面的能力还是相当强悍的</p>
<p></p>
分享到:
相关推荐
使用python实现dict和json字符串的互相转换,以及相应的文件读入和存取操作。相当于实现了简单的jsonlib。对于Python的学习有一定的帮助。 主要的类是JsonParser,对外的接口在JsonParser里有定义,对外的接口均有...
今天小编就为大家分享一篇Python XML转Json之XML2Dict的使用方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
今天小编就为大家分享一篇python 实现dict转json并保存文件,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
xml格式转化为字典(dict)的python程序,含: 1 .xml测试文件; 2 xml文件到字典格式的python源代码。
vqa_dict.json
主要介绍了Python 提取dict转换为xml/json/table并输出的实现代码,需要的朋友可以参考下
python基础教程:在python中利⽤dict转json按输⼊顺序输出内容⽅式 今天⼩编就为⼤家分享⼀篇在python中利⽤dict转json按输⼊顺序输出内容⽅式,具有很好的参考价值,希望对⼤家有所帮助。⼀起跟随 ⼩编过来看看吧 ...
节点具有以下属性-parent类型Node,如果parent不为none,则为root -name类型字符串(用于xml标记名称和json关键字值类型字符串(这是标签之间的数据或json的键值-metadata类型dict-用于指示xml中的字符串并为其指定...
今天小编就为大家分享一篇在python中利用dict转json按输入顺序输出内容方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
1、json 和 字典 区别 ...json中必须使用双引号,dict则可以用单引号也可以用双引号 2、json.dump()/json.load() 和 json.dumps()/json.loads()区别 json.dumps()/json.loads()用来编码和解码json字符串数据 js
最近在做APP的接口,遇到XML格式的请求数据,费了很大劲来解决,下面小编给大家分享下Python中xml和dict格式转换问题,感兴趣的朋友跟随小编一起看看吧
一 、json与dict的区别 1.1(两者概念区别) Python 的dict是一种数据结构,json 是一种数据传输格式 Python的dict的key可以是任意可hash对象,json只能是字符串。形式上有些相像,但json是纯文本的,无法直接操作 ...
一个供用户以Python Dict或JSON格式编写(科研中实验)配置的库,在代码中用点.读写属性,同时可以从命令行中读取参数配置并修改参数值。 支持字典内参数无限层级嵌套 自动版本检查 支持参数值限定为指定值(枚举)...
readascent-py:以BUFR格式读取探空仪上升数据并转换为dictjson
json2shapes(dict json_from_overpass) -将天桥json转换为*形状对象 xml2shapes(str xml_from_osm) -将OSM xml或Overpass xml转换为* Shape-objects json2geojson(dict json_from_overpass) -将天桥json转换为...
JSON字典 用于在JSON术语( {ab, c-[1, 2, 3], d-[{1-a, 2-a}, {1-b, 1-c}]} )之间转换的库字典的实现。 希望这将使查询和构建JSON术语更加简单。 JSON到字典的映射 JSON对象映射到字典,而数组是列表。 因此,如果...