JSON语法
JSON 的语法主要有以下5点:
- 数组(Array)用方括号(“[]”)表示。
- 对象(Object)用大括号(”{}”)表示。
- 名称/值对(name/value)之间用冒号(”:”)隔开。
- 名称(name)置于双引号中,值(value)有字符串、数值、布尔值、null、对象和数组。
- 并列的数据之间用逗号(“,”)分隔
验证自己的 JSON 格式是否正确,可以在:http://json.cn/ 验证。如有错误会有提示
JSON解析
在 JavaScript 中,有两个方法与此相关:JSON.stringify 和 JSON.parse。其中:
- JSON.stringify 用于将 JavaScript 对象转换成 JSON 字符串。
- JSON.parse 用于将 JSON 字符串转换成 JavaScript 对象。
具体用法如下:
1 var str = '{"name": "Geoff Lui","age": 26,"friends":["Lucy","Lily","Gwen"]}'; 2 3 var obj = JSON.parse(str); //返回一个 JavaScript 对象 4 5 console.log(obj); 6 7 var jsonstr = JSON.stringify(obj); //返回一个 JSON 字符串 8 9 console.log(jsonstr);
d3.json 的实质就是通过 Ajax 请求服务器的数据,然后用 JSON.parse() 将返回的字符串转换成 JavaScript 对象的结果
GeoJSON和TopoJSON
GeoJSON 和 TopoJSON 都是是符合 JSON 语法规则的两种数据格式,只不过对其名称进行了规范,专门用于表示地理信息
GeoJSON 的最外层是一个单独的对象(object)。这个对象可表示:
- 几何体(Geometry)。
- 特征(Feature)。
- 特征集合(FeatureCollection)。
最外层的 GeoJSON 里可能包含有很多子对象,每一个 GeoJSON 对象都有一个 type 属性,表示对象的类型,type 的值必须是下面之一。
- Point:点。
- MultiPoint:多点。
- LineString:线。
- MultiLineString:多线。
- Polygon:面。
- MultiPolygon:多面。
- GeometryCollection:几何体集合。
- Feature:特征。
- FeatureCollection:特征集合。
如果 type 的值为 GeometryCollection(几何体集合),那么该对象必须有变量 geometries,其值是一个数组,数组的每一项都是一个 GeoJSON 的几何对象。例如:
{ "type": "GeometryCollection", "geometries": [ { "type": "Point", "coordinates": [100, 40] }, { "type": "LineString", "coordinates": [ [100, 30], [100, 35] ] } ] }
如果 type 的值为 Feature(特征),那么此特征对象必须包含有变量 geometry,表示几何体,geometry 的值必须是几何体对象。此特征对象还包含有一个 properties,表示特性,properties 的值可以是任意 JSON 对象或 null。例如:
{ "type": "Feature", "properties": { "name": "北京" }, "geometry": { "type": "Point", "coordinates": [ 116.3671875, 39.977120098439634] } }
如果 type 的值为 FeatureCollection(特征集合),则该对象必须有一个名称为 features 的成员。features 的值是一个数组,数组的每一项都是一个特征对象。
TopoJSON 是 GeoJSON 按拓扑学编码后的扩展形式,是由 D3 的作者 Mike Bostock 制定的。相比 GeoJSON 直接使用 Polygon、Point 之类的几何体来表示图形的方法,TopoJSON 中的每一个几何体都是通过将共享边(被称为arcs)整合后组成的。
TopoJSON 消除了冗余,文件大小缩小了 80%,因为:
- 边界线只记录一次(例如广西和广东的交界线只记录一次)。
- 地理坐标使用整数,不使用浮点数。
在线生成 GeoJSON:http://geojson.io/
简化、转换 GeoJSON 和 TopoJSON:http://mapshaper.org/