一种xml和json数据格式的简化方法

——jcstone 2021-3-31

一、xml和json的不足

在采用xml或者json描述大量结构相同的数据时,常常为其重复的属性或键名占用大量空间而头疼。为解决这一问题,笔者提出一种简化的写法,简化并压缩xml和json数据格式文件。

例如我们表达一系列位置点时候(常见geojson),xml的通常写法:

<?xml version='1.0' encoding='utf-8'?>

<setting>

<points>

<!-- pointid点号,E东坐标,N北坐标,H高程,cal是否计算;-->

<point pointid="P1" E="460634.9085" N="4476368.246" H="0" cal="true" />

<point pointid="P2" E="416114.9887" N="4424893.137" H="0" cal="true" />

<point pointid="P3" E="475361.4172" N="4411159.582" H="0" cal="true" />

</points>

</setting>

而json的通常写法:

{

"setting": {

"points": {

"point": [

{

"pointid": "P1",

"E": "460634.9085",

"N": "4476368.246",

"H": "0",

"cal": "true"

},

{

"pointid": "P2",

"E": "416114.9887",

"N": "4424893.137",

"H": "0",

"cal": "true"

},

{

"pointid": "P3",

"E": "475361.4172",

"N": "4411159.582",

"H": "0",

"cal": "true"

}

]

}

}

}

这中情形对十个点以下时,多几个属性或者键名无所谓,但对于成百上千的点,这些重复的属性和键显得臃肿笨重,数据组织工作量大。因此,人们往往选择csv文件格式,读取后数据后解析。但csv数据格式单一,对于存在数据的其它描述或者配置参数时,开发人员又不得不求助于xml或者json,导致程序数据或配置文件组织十分不便。这里笔者提出数据结构定义结合csv格式的写法,简化并压缩xml/json文件,并根据需要进行扩展。

二、极简写法

1、Xml格式

<?xml version="1.0" encoding="UTF-8" ?>

<setting>

<point col="pointid,E,N,H,iscal">

<row>P1,460634.9085,4476368.246,0,true</row>

<row>P2,416114.9887,4424893.137,0,true</row>

<row>P3,475361.4172,4411159.582,0,true</row>

</point>

</setting>

point对象col属性描述元数据列名的简单定义,row节点内容采用csv行格式描述点的各属性值。

2、Json格式

{

"setting": {

"point": {

"col": "pointid,E,N,H,iscal",

"row": [

"P1,460634.9085,4476368.246,0,true",

"P2,416114.9887,4424893.137,0,true",

"P3,475361.4172,4411159.582,0,true"

]

}

}

}

point对象col键值描述元数据列名的简单定义,row数组采用csv行格式描述点的各属性值,比原先的json格式增加了可读性。

3、极简写法的说明

极简写法通过属性值或键值描述了元数据的字段名,然后通过csv格式描述其内容。解决大量重复属性名或键名的情形。并且可读性并不比原先的方式差,简化后的json格式可读性比原来带换行格式的json更好。但是元数据的字段数据类型并没有很好地表述,对开发人员来说无法对读取的数据进行进行类型转换。

三、完整的数据结构定义简化方法

1、XML格式

<?xml version="1.0" encoding="UTF-8" ?>

<setting>

<point>

<cols>

<pointid>string</pointid>

<E>float</E>

<N>float</N>

<H>int</H>

<iscal>bool</iscal>

</cols>

<rows>

<row>P1,460634.9085,4476368.246,0.0,true</row>

<row>P2,416114.9887,4424893.137,0.0,true</row>

<row>P3,475361.4172,4411159.582,0.0,true</row>

</rows>

</point>

</setting>

2、json格式

{

"setting": {

"point": {

"cols": {

"pointid": "string",

"E": "float",

"N": "float",

"H": "int",

"iscal": "bool"

},

"rows": [

"P1,460634.9085,4476368.246,0.0,true",

"P2,416114.9887,4424893.137,0.0,true",

"P3,475361.4172,4411159.582,0.0,true"

]

}

}

}

完整的数据结构定义简化方法定义了元数据完整的结构,包含字段名称及数据类型,方便数据读入后进行处理。虽然在增加了cols一些内容,但对于大量的行数据而言,微不足道。

这里注意的是需要将数据类型根据常用的语言如python、JavaScript等对数据类型进行调整定义。当前现有各语言的xml和json读取解析包、库、模块,在读取xml/json后要根据cols定义的数据类型进一步解析。写之前也需要转为以上简化格式后再写入。

(0)

相关推荐

  • Python常用配置文件ini、json、yaml读写总结

    原创 吾非同 吾非同 3天前 开发项目时,为了维护一些经常需要变更的数据,比如数据库的连接信息.请求的url.测试数据等,需要将这些数据写入配置文件,将数据和代码分离,只需要修改配置文件的参数,就可以 ...

  • 拍花背景复杂,4种简化方法!(第413期)

    第1:加强背景的虚化,来衬托主体. 第2:借用随身道具作为背景. 第3:借用更好的道具作为背景. 第4:调暗背景的光影,来突出主体. 第5:添加主题文字,来增强格调. 目的只有一个: 让背景虚化厉害, ...

  • XML与JSON学习笔记分享

    学习笔记3:XML与JSON 配套工具包含: fastjson-1.2.70.jar.gson-2.8.6.jar.dom4j-1.6.1.jar.jaxen-1.1-beta-7.jar.xstre ...

  • 【机械制图】12种机械制图中常用的图纸简化画法

    专注于机械行业.专业.职业信息分享  服务于制造业百万工程师 推荐阅读 [专业知识]都工程师了,还是各种螺纹傻傻分不清? [经验分享]看图学习轴承的拆卸方法,不可用蛮力哦 [机械制图]机械图纸中常见的 ...

  • 一种温肾壮阳茶的制作方法

    [技术领域] [0001 ] 本发明涉及茶领域,具指一种温肾壮阳茶. [背景技术] [0002]随着生活水平的提高,人们已经注重养生保健.茶疗是根植于中医药文化与茶文化基础之上的一种养生方式,茶疗是指 ...

  • 一种体癣止痒酊剂配方及其制造方法.pdf

    摘要 申请专利号: CN200710147498.4 申请日: 20070918 公开号: CN101390863A 公开日: 20090325 当前法律状态: 有效性: 失效 法律详情: IPC分类 ...

  • 一种克白酊剂、其制备方法和应用.pdf

    一种克白酊剂.其制备方法和应用     本发明涉及一种治疗白癜风的药物组合物.其制备方法和应用. 白癜风是一种常见的色素脱失性皮肤病,临床表现为皮肤上大小不等.形状不一.数目不定.界限清楚的色素脱失斑 ...

  • 一种适于水煎提取青蒿素的方法

    一种适于水煎提取青蒿素的方法 [技术领域] [0001]本发明公开了一种适于水煎提取青蒿素的方法,属于青蒿素制备技术领域. [背景技术] [0002]青蒿素是一种无色针状晶体,分子式为C15H2205 ...

  • 发明:一种克白酊剂、其制备方法和应用

    克白酊剂及其制备方法和应用 本发明涉及一种治疗白癜风的药物组合物.其制备方法和应用. 白癜风是一种常见的色素脱失性皮肤病,临床表现为皮肤上大小不等.形状不一.数目不定.界限清楚的色素脱失斑,中医称之为 ...

  • 一种研究宇宙基本成分的新方法,彻底搞懂粒子物理学

    经典的物理理论认为物质由基本粒子组成,它们之间仅以几种不同的方式相互作用.在20世纪70年代,物理学家开发了一套描述这些粒子和相互作用的方程.这些方程共同形成了一个简明的理论,现在被称为粒子物理学的标 ...