json和geojson有啥区别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了json和geojson有啥区别相关的知识,希望对你有一定的参考价值。

参考技术A GeoJSON 是一种对地理数据结构进行编码的格式。它只是一个采用上述 JSON 格式的用于描述地理信息的格式。它的语法和 JSON 是一样的,只是对各名称做了规范。
JSON(javascript Object Notation) 是一种轻量级的数据交换语言,以文字为基础,且易于让人阅读。尽管 JSON 是 Javascript 的一个子集,但 JSON 是独立于语言的文本格式,并且采用了类似于C语言家族的一些习惯本回答被提问者和网友采纳

JSON 和 JavaScript 对象有啥区别? [复制]

【中文标题】JSON 和 JavaScript 对象有啥区别? [复制]【英文标题】:What are the differences between JSON and JavaScript object? [duplicate]JSON 和 JavaScript 对象有什么区别? [复制] 【发布时间】:2011-04-27 21:54:49 【问题描述】:

我是 JSON 和 JavaScript 对象的新手。

谁能解释一下 JSON 和 JavaScript 对象之间的区别? 它们有什么用途? 一种比另一种更好吗?还是视情况而定? 什么时候使用哪个,在什么情况下? 为什么首先创建 JSON?它的主要目的是什么? 谁能举例说明何时应该使用 JSON 而不是 JavaScript 对象,反之亦然?

【问题讨论】:

请一次一个问题。 @LightnessRacesinOrbit 不错的尝试 @FélixGagnon-Grenier 谢谢 【参考方案1】:

首先你应该知道 JSON 是什么:

它是语言无关的数据交换格式。

JSON 的语法受 JavaScript Object Literal 表示法的启发,但它们之间存在差异。

例如,在 JSON 中,所有 keys 都必须被引用,而在对象字面量中,这不是必需的:

// JSON:
 "foo": "bar" 

// Object literal:
var o =  foo: "bar" ;

引号在 JSON 中是强制性的,因为在 JavaScript 中(更准确地说是在 ECMAScript 3rd. Edition 中),不允许使用 保留字 作为属性名称,例如:

var o =  if: "foo" ; // SyntaxError in ES3

虽然,使用字符串文字作为属性名称(引用属性名称)没有问题:

var o =  "if": "foo" ; 

所以对于“兼容性”(也许是简单的评估?)引号是强制性的。

JSON 中的数据类型也限制为以下值:

string number object array 文字为: true false null

Strings 的语法发生了变化。它们必须双引号分隔,而在JavaScript中,您可以互换使用单引号或双引号。

// Invalid JSON:
 "foo": 'bar' 

Numbers 接受的 JSON 语法也发生了变化,在 JavaScript 中,您可以使用十六进制文字,例如 0xFF,或(臭名昭著的)八进制文字,例如010。在 JSON 中,您只能使用十进制文字。

// Invalid JSON:
 "foo": 0xFF 

有一些错误的实现(Firefox 3.5+、IE8+、json2.js)错误地允许使用八进制文字,例如JSON.parse('01') 应该产生一个SyntaxError

【讨论】:

+1 很好的答案,但可以强调子集:任何有效的 JSON 声明也是有效的 JavaScript 声明,但并非所有有效的 JavaScript 声明都是 JSON 声明。 也有助于演示我们在 Javascript 文件中看到 JSON 的唯一方式;即在字符串内。 @DanielEarwicker:并非所有有效的 JSON 都一定是 javascript 中的有效对象表达式:timeles-s-repo.com/json-isnt-a-javascript-subset 某些 unicode 空白字符在 json 字符串中有效,但在 javascript 中无效。 @EamonNerbonne - 如该页面所述,在它(很少)导致问题的唯一情况下非常容易修复。 这是一个潜在的 crashbug 问题,如果攻击者嵌入 \u2028 字符并且您的(有效的)json 序列化程序没有转义它们(因为没有必要),那么任何包含 json 的页面文字并将其评估为 JS 对象可能会遇到异常。很容易修复;在序列化程序级别,但它不是一个适当的子集是一个痛苦 - 然后你可以可靠地在 javascript 中嵌入(有效)json 而没有风险。这主要是烦人,仅此而已 - 授予:-)。【参考方案2】:

JSON 是对象的字符串表示形式。它是一种可互操作的序列化格式。它不仅与 javascript 相关联。例如,.NET 的 JSON 序列化程序允许您序列化/反序列化 .NET 对象。

所以它只是一种允许您从对象转换为字符串并返回的格式,如果您想通过网络传输它们,这很方便。

它非常接近于 javascript 对象表示,如果你只是 eval() 一个 JSON 字符串,你会得到相应的对象。

【讨论】:

别让 Crockford 听到你这么说...... @nickf,Crockford 的 json2.js 库就是这样做的,eval 经过一些“正则表达式验证”后,它不会做任何 解析 :P。事实上,即使是他的自己的库也与his own RFC!有一些偏差,例如json2.js可以错误地“解析”八进制文字,例如:JSON.parse("01")...我觉得很有趣: P @CMS 好吧,我猜道格会反对“简单地 eval()”这个短语然后......(没有正则表达式验证等) 所以如果我只是用 JavaScript 编写一个需要使用对象的程序,我不应该使用 JSON,因为我没有将对象发送到其他地方? Not all JSON strings are valid JS【参考方案3】:

JSON 是一种数据交换格式,它恰好看起来像 YAML 或 JavaScript 代码的子集,您可以执行并取回对象。 JavaScript 对象只是 JavaScript 中的一个对象。

由于 JSON 是一种数据交换格式,您可以与它交换文本形式的结构化数据。现在它已经与 JavaScript 完全解耦了。 JavaScript 对象允许您在 JavaScript 程序执行期间创建和使用结构化数据。

【讨论】:

以上是关于json和geojson有啥区别的主要内容,如果未能解决你的问题,请参考以下文章

GeoJSON 和 TopoJSON

GeoJSON 和 TopoJSON 的区别

在 GeoJson 对象中包含 JSON 流?

GeoJson的生成与解析,JSON解析,Java读写geojson,geotools读取shp文件,Geotools中Geometry对象与GeoJson的相互转换

将 JSON 转换为 QGIS GeoJSON:同时具有多种功能和不同类型

GeoJSON快速入门教程