`

JSON是什麼

阅读更多

JSON是什麼?

JSON是JavaScript Object Notation(JavaScript物件表示法)的縮寫。簡單來說,就是用JavaScript表達陣列或物件的語法,做為傳遞物件訊息的語法。而由於這樣的語法也應該能夠輕易地被JavaScript所處理,JSON可以方便且快速地使用字串傳遞物件資料

JSON只使用幾種JavaScript的型態來進行表記:Number、Boolean、String、Object、Array和null。講這麼多不如來舉個例子好了。以下是一個合理的JSON字串:

{
  "users":
  [
    ...{
    "name": "littlebtc",
    "posts": 203,
    "admin": true,
    "intro": null
    }
,
    ...{
    "name": "doggy",
    "posts": 2,
    "admin": false,
    "intro": "I am a cute dog!"
    }

  ]
}

如 果你有過JavaScript的基礎,應該可以馬上看到JSON中物件({}括起來的)以及陣列([]括起來的)上的語法以及其他型態的語法上是和 JavaScript相同的。但要注意的是在JSON中,字串只允許用雙引號括起,而定義物件中的元素名稱時,其名稱也要使用雙引號標示。這樣的限制讓語 法變得比較一致 :)

 

不安全的JSON使用法

假如我把以上的JSON字串存在一個叫做json_text的變數中,而我想要讀取其中的內容,該怎麼辦呢?也許你會想到要用JavaScript的eval()(MSDN/MDC):

var myObject = eval("(" + json_text + ")");

// 這樣一來, myObject.users[1].name 就是 "doggy"(看一下前面的JSON吧)!

這樣子做是可行的,但是問題是這樣的語法極度不安全。原因在於eval()會乖乖執行那個字串字串裏頭的所有程式碼,如果對方使用奇怪的語法來攻擊網站(像是用document.write幫網頁加料),使用eval()會變得非常難以防禦

 

原生的JSON支援

這時來切入正題--有關IE8對JSON的支援。

由於JSON在使用eval()下可能會發生若干的問題,在ECMAScript 3.1正在修訂的草案中,有關解析/編碼JSON的標準原生函數被提了出來,所以應該會成為標準。主要而言有兩個:

  • JSON.parse()→安全地將JSON字串轉為物件
  • JSON.stringify()→安全地將物件轉為JSON字串

請容許我跳過複雜一點的例子和toJSON()的介紹,來看非常簡單的原生JSON處理。一樣,json_string是指剛剛最上面的JSON語法舉例:

// JSON -> Object
var myObject = JSON.parse(json_text);
alert(myObject.users[0].name); // littlebtc

// Objecy -> JSON
var myString = JSON.stringify(myObject);
alert(myString); // ...{"users":[{"name":"littlebtc","posts":203,"admin":true,"intro":null},{"name":"doggy","posts":2,"admin":false,"intro":"I am a cute dog!"}]}

可以看得出來,在使用了原生的JSON支援之後,不但可以高枕無憂地接收AJAX下傳來的JSON訊息,還可以輕鬆地用一行程式碼,把物件轉換成為一個JSON字串!跟使用XML比起來,JSON這樣實在是十分地有吸引力!(不過事實上XML也不甘示弱,他們也有E4X XD)

頭大時間:瀏覽器支援

又回到了頭大的時間:瀏覽器支援問題。這樣使用JSON看起來很美好,可是來看看瀏覽器的支援度吧:

等等,沒了?沒錯,沒了。 XD 其他瀏覽器都還沒有開始打算要動這一塊的樣子。

那該怎麼辦呢?過去在沒有JSON原生支援的時代,有一個廣為被使用的編解碼JSON腳本,也就是json.org的json2.js(捲到最下面有原始碼)。而更讓人雀躍的是,json2.js已經將語法修正為和ECMAScript提議中的新標準一致的新語法了。所以,我們可以使用json2.js和原生JSON相配合的方法來達到最大的瀏覽器支援:

<script type="text/javascript" src="json2.js"></script>
分享到:
评论

相关推荐

    JSON是什么?有哪些优点?JSON和XML的区别?

    一、JSON是什么? 有一种叫做JSON (JavaScript Object Notation) 的轻量级数据交换格式能够替代XML的工作。它就是JSON。 数据格式比较简单, 易于读写, 格式都是压缩的, 占用带宽小。 易于解析这种语言, 客户端...

    json的jar包及运行必须的jar并包含json.js文件

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它采用完全独立于语言的文本格式,但也使用了类似于C家族语言,包括C、C++、C#、Java、JavaScript、Perl、Python等。JSON是数据交换的理想选择,...

    net.sf.json包

    net.sf.json依赖jar包,其中包括: commons-beanutils-1.7.0.jar commons-collections-3.1.jar commons-lang-2.5.jar commons-logging.jar ezmorph-1.0.3.jar json-lib-2.4-jdk15.jar

    json-smart的dome

    首先,我们需要理解JSON是什么。JSON是一种轻量级的数据交换格式,它基于JavaScript的一个子集,易于人阅读和编写,同时也易于机器解析和生成。JSON-Smart库提供了方便的API,使开发者可以轻松地将Java对象转换为...

    fontlist-v330.json文件来自.matplotlib

    fontlist-v330.json文件来自.matplotlib

    Notepad++ JSON格式 转换插件

    直接复制到Notepad++ 安装目录下的\plugins文件夹即可 - 使用的时候全选json部分字符 - 在工具栏选择 -插件 --JSONviewer ---Format JSON 即可转换

    Features.json

    这是使用深度学习提取的特征的文件。提取的特征可用于进一步使用,如用于训练另一个模型或者进行特征融合...

    _menu.json

    _menu.json

    json文件是什么+为什么使用json文件+如何使用json文件

    JSON 文件是什么?为什么使用 JSON 文件?如何使用 JSON 文件? JSON 文件是什么? JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,于 21 世纪初由 Douglas Crockford 提出。该格式旨在解决数据...

    MFC使用json11解析JSON

    json11::Json jsonObject = json11::Json::parse(jsonString); if (jsonObject.is_object()) { // 处理解析成功的对象 } else { // 处理解析错误 } ``` 一旦你有了JSON对象,可以访问其成员或进行修改。例如,...

    json转换jsonschema

    而JSON Schema则是一个JSON格式的规范,用于定义JSON数据的结构和限制,类似于XML Schema,它为JSON数据提供了验证规则,确保数据的准确性和一致性。 在JavaScript开发中,有时我们需要将JSON对象转换为JSON Schema...

    json paser 属于idea插件 用于解析json

    json paser 属于idea插件 用于解析json json paser 属于idea插件 用于解析json json paser 属于idea插件 用于解析json json paser 属于idea插件 用于解析json json paser 属于idea插件 用于解析json json paser 属于...

    JsonView查看JSON利器

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,被广泛应用于Web服务与客户端之间的数据传输。它易于人阅读和编写,同时也易于机器解析和生成。JsonView是一款优秀的浏览器扩展,专门设计用来帮助...

    最好用的c++json库 nlohmann json源代码

    最好用的c++json库 nlohmann json源代码最好用的c++json库 nlohmann json源代码最好用的c++json库 nlohmann json源代码最好用的c++json库 nlohmann json源代码最好用的c++json库 nlohmann json源代码最好用的c++json...

    output.json

    output.json

    json3.js 【JS / JavaScript 中解析JSON的js包,JSON官方的JSON解析包】

    json3.js 【JS / JavaScript 中解析JSON的js包,JSON官方的JSON解析包】。JavaScript中解析JSON的js包,页面中引入json3.js,即可使用。 使用方法:JSON.parse(str), JSON.stringify(obj) 更多详情请参考博文: ...

    JsonEditor编辑器

    JsonEditor是一款专为前端开发者设计的强大JSON数据编辑器。它提供了直观的图形用户界面,使得编辑、查看和操作JSON对象变得简单易行。这个编辑器不仅适用于开发阶段的数据调试,还可以用于构建配置界面或者需要用户...

    org.json的依赖包

    标题中的“org.json的依赖包”指的是一个与Java开发相关的依赖包,主要包含了处理JSON(JavaScript Object Notation)数据的类库。JSON是一种轻量级的数据交换格式,被广泛用于Web服务和应用程序之间的数据传输。org...

    java json api,json api

    Java JSON API是Java平台上的库,提供了处理JSON的能力,包括解析JSON字符串、生成JSON对象以及进行JSON与Java对象之间的转换。 在Java中,有多种实现JSON API的库,如Jackson、Gson、org.json和json-lib等。本篇...

    json-c-0.3.tar.gz_JSON_json linux_json-c_linux json

    使用JSON-C库时,首先需要在项目中包含头文件`#include &lt;json/json.h&gt;`,然后利用库提供的API,如`json_object_new_string()`创建一个JSON字符串,`json_object_get_string()`获取JSON对象中的字符串值,等等。...

Global site tag (gtag.js) - Google Analytics