关于JSON

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/

 

posted @ 2017-12-23 14:02  Hyacinth-Yuan  阅读(263)  评论(0编辑  收藏  举报