vlambda博客
学习文章列表

「GIS基础」JSON数据格式初探

 


文/妙手 

生命不息,折腾不止

     

JSON和GeoJSON都是GIS领域广泛应用的数据交换格式,也是WebGIS中不可或缺的内容。通过本文,您可以初步认识JSON数据格式,它的数据类型、语法规则以及在JavaScript, Python, PHP语言下的读写,还可以简单了解一下JavaScript的发展历程,在下一篇中,我们将介绍JSON数据格式在GIS领域的运用。


1

简介



JSON 是一种轻量级的数据交换格式,易于人阅读和编写,易于机器解析和生成,它的出现基于JavaScript的一个子集,关于ECMA-262,涉及到JavaScript的发展历程,放在了文末,大家感兴趣的话可以了解一下。


JSON 是一种完全独立于语言的文本格式,但是也遵守一些常见语言的习惯(像C,C++,C#, Java, JavaScript, Perl, Python)正因如此,JSON成为一门理想的数据交换语言。


JSON让数据交换变得轻松,通常是程序和数据库间的数据交换,JSON为满足实时的服务器与浏览器间的交流的需要而出现。


1

数据类型


JSON只包括数字、字符串、布尔值、数组、对象、Null六种数据类型。


「GIS基础」JSON数据格式初探

数字:并不区分整型和浮点型;


字符串:表示为 “…”;


布尔值:表示为True或者False;


数组:表示为 […];


对象:表示为 {…};


Null: 表示空值


1

语法规则


JSON 语法有以下2大规则 


1. “名/值“对的集合(也就是常说的键值对),不同的语言中,它被理解为对象、记录、结构、字典、哈希表、有键列表或者关联数组;


2. 值的有序列表,大多语言中,它被理解为数组、矢量、列表或者序列。


这两种结构让小编联想到对象数组 {[…]},数组对象 [{…}]的概念。


这些都是常见的数据结构,假如所有的现代编程语言都以某种形式支持它们(目前主流编程语言都支持),使得一种数据格式在这些编程语言间沟通成为可能。


1

具体例子


初步了解后,我们来看一个具体的例子,更加直观,便于理解。

「GIS基础」JSON数据格式初探


很容易可以理解上图中代码的意思,JSON有着易于人的阅读和编写的特性,图中为一个检查是否为合法JSON格式的网站:https://jsonlint.com/ ,推荐给大家。PS:使用VSCode这类的编辑器也会自带检测JSON合法性。


举一个具体使用的例子,一个动态网页想从服务器获得数据时,服务器从数据库查找数据,然后把数据转换为JSON格式,这样网页的脚本代码就可以把此JSON字符串解析为内部的数据格式去使用。


上述过程可以分为两大步骤,第一步将数据编码成JSON字符串,我们称之为stringify,第二步把JSON字符串解析为数据,我们称之为parse


1

JavaScript读写JSON


核心是JavaScript语言中的JSON对象,该对象有两个方法,stringify() 和parse(),很好的对应着上文的两个步骤,当然,JSON本就出自JavaScript的子集,对JavaScript支持的如此自然也不足为奇。


JSON.stringify()


方法JSON.stringify()将JavaScript对象编码成JSON字符串


「GIS基础」JSON数据格式初探


转换结果:


「GIS基础」JSON数据格式初探


JSON.parse()


方法JSON.parse()将JSON字符串解析为JavaScript对象


「GIS基础」JSON数据格式初探


1

Python读写JSON


使用JSON函数需要导入json库:import json


与对应上文的两个步骤相对应,这里也同样有两个函数json.dumps()和json.loads(),我们依次介绍:


json.dumps()


方法json.dumps()将Python对象编码成JSON字符串


「GIS基础」JSON数据格式初探


Python原始数据向json类型的转换对照表:


dict object
list, tuple array
str, unicode string
int, long, float number
True true
False false
None null


json.loads()


方法json.load()将JSON字符串解析为Python对象


「GIS基础」JSON数据格式初探


JSON类型转换到python的类型对照表:


object dict
array list
string unicode
number(int) int, long
number(real) float
true True
false False
null None


结合两个对照表,我们发现将Python对象编码成JSON字符串后,再将该JSON字符串解析为Python对象有时候会和初始的Python对象有所不同,认识到其实编码和解码两个过程不是完全互逆的。


1

PHP读写JSON


对应上文提到的两个步骤,这里也同样有两个函数json_encode()和json_decode(),我们依次来看:


json_encode()


方法json_encode()将PHP对象编码成JSON字符串


「GIS基础」JSON数据格式初探


json_decode()


方法json_decode()将JSON字符串解码为PHP对象


「GIS基础」JSON数据格式初探


1

扩展:ECMA-262


ECMA是一家国际标准化组织,简单说就是制定、发布相关技术标准的组织,该组织出版了约370个标准和90篇技术报告,其中ECMA-262是专门关于ECMAScript的标准规范。


「GIS基础」JSON数据格式初探ECMA-262也在不断的发展、完善,至今为止已经到第十版。


1 1997年6月 首版
2 1998年6月 格式修正,以使其形式与ISO/IEC16262国际标准一致
3 1999年12月 正则表达式、新的控制指令、异常处理等
4 放弃
5 2009年12月 扩展Object、Array、Function等原生对象,添加JSON原生对象,引入了严格模式(strict mode)
5.1 2011年6月 成为ISO国际标准(ISO/IEC 16262:2011)
6 2015年6月 官方名称ECMAScript 2015, 也称ES6,添加类和模块机制、迭代器、箭头函数等等
7 2016年6月 ES2016
8 2017年6月 ES2017
9 2018年6月 ES2018 包含了异步循环、生成器等
10 2019年6月 ES2019


「GIS基础」JSON数据格式初探


今年推出的ES2019


笔者还在ES6挣扎,对之后的版本特性并没有过多了解,故在此不多介绍。说了这么多,ECMAScript和JavaScript有什么关系?ECMAScript 不是一种编程语言,仅仅是一种脚本语言规范,不支持输入输出,ECMAScript的实现需要主机环境,浏览器端就是一种宿主环境,ECMAScript在浏览器端的实现就是JavaScript. 此外还有其他的主机环境,ECMAScript在服务器端的实现是NodeJS. 一句话来说,ECMAScript是JavaScript的规范,JavaScript是ECMAScript的实现。


1

总结


总结一下本文,我们初步认识了JSON数据格式,它的数据类型、语法规则,简单了解其在JavaScript, Python, PHP语言下的读写,现在我们已经做好了学习JSON和GeoJSON数据格式在GIS领域运用的充分准备,下次见~


1

扩展阅读












1

分享你的文章


「GIS基础」JSON数据格式初探

码加小编

一起"稿"GIS

「GIS基础」JSON数据格式初探


END


关注 麻辣GIS
627853279(QQ群三)
436386604(QQ群四)
606176554(QQ群五)

http://malagis.com