Archive

文章標籤 ‘json’

好用的JSON.stringify(物件建立JSON字串)

2013年5月12日 尚無評論

在Client Server 架構,最麻煩的就是debug,單單server 可以用開發工具的debug mode來抓問題,而client只能借助一些瀏覽器的工具來抓問題而且也沒有debug mode,頂多只有console.log 可以用,多半都要用alert 來顯示相關資訊,而現在ajax 盛行,要抓問題時,不再只是顯示一個單值這麼容易,所以今天來介紹一下如何顯示json的值!

JSON.stringify是什麼呢?

在查資料的同時,才發現自己都是東摸一點,西學一點,沒有學習一個完整性,所以都要花上不少時間,或浪費不少時間,json格式已經瞭解並大量在使用了,但看到JSON.stringify才知,這麼好用的函式怎麼這麼晚才去瞭解呀!  在Firefox 3.1、Internet Explorer 8以上,已經都有支援,它可以將物件轉成JSON字串,所以在查詢時就很方便,以往當我們要將javascript 的物件查看其內容時,在alert 這物件只會顯示這是個[object],還要特別去指定一個屬性才會顯示該屬性質,要查詢時蠻不方便的,而透過JSON.stringify轉成JSON字串後,就可以很輕鬆查看

JSON.stringify怎麼用?

使用語法:

JSON.stringify(value [, replacer] [, space])
value:目標物件(陣列)
replacer:要比對顯示的對像物件(陣列)
space:要補的空白

如果你有個物件要顯示,最簡單的方式如下:

var obj= new Object();
obj.name="Tony";
obj.age=33;
obj.tel="0912332112";
obj.sex="M";

alert(JSON.stringify(obj));

這時你可以得到:

 

多棒呀!!,JSON完整的資訊全顯示出來了,不過還有更棒的,可以在後面加上空白

alert(JSON.stringify(obj,null,4));

顯示時排列的很整理,更方便閱讀了說!!

至於中間參數replacer的用法,就是可以進行過濾的動作,將符合replacer的顯示出來,相關用法我這邊就不多寫了,如有興趣,可以看這篇文章,寫的蠻不錯的~簡單易懂 : JSON.stringify 语法讲解 – 随风浪迹天涯 – 博客园

感想

以往再使用json都是透過ajax 傳遞,所以可以透過查看response就可以看到相關內容,這次單單用在client就覺得JSON.stringify特好用的,看來還是要多多把基本功打好才行呀~^^

Categories: AJAX, Java Script, WebDesign, 未分類 Tags:

JSON 解析與運用 for Java

2009年1月24日 尚無評論

json在jQuery使用ajax運用應該常會需要用到

去網路上找一下json目前在java上有沒有好的元件可以使用,找到一個不錯的open source,網址如下:

http://www.json.org/java/

他除了提供java物件轉換成json格式的功能
還有xml 與json之間互轉的實作,
所以算是該有的都有了,不過小弟目前只使用簡單的傳參數
所以就先介紹這個囉:

JSONObject  j = new JSONObject();
j.put(“code”,”000″);
j.put(“msg”,”hello world”);
out.println(j.toString());

最後會得到

{“code”:”000″,”msg”:”hello world”}

如果要更多的用法,它所提供的sample code就非常完整,千萬要先看一下,包你事半功倍 !!

Categories: Java Script Tags: ,

JSON 解析與運用 for PHP

2009年1月6日 尚無評論

JSON格式在Javascript裡算是標準的資料格式,但在其它語言就不算是了,所以各家server端的程式語言就要去解析來配合了,目前剛好會先用PHP進行與jquery的測試,所以先對PHP對JSON解析進行瞭解。

目前PHP在5.2版之後已經有內建支援JSON的轉換函式,看來也是因為ajax當道,所以php 直接內建了..^^
在5.2版的PHP 可以使用 json_encode及json_decode 進行轉換成PHP物件陣列,用法如下:

//PHP
$test=array(
“x” => 1,
“y” => 2,
“str” => “test string”,
“a” => array (
  “array value 1”,
  “array value 2”,
  3
}
);

$jsonstr = json_encode($test);
$jsonstr內容則為
{
“x”:1,
“y”:2,
“str”:”test string”,
“a”:[
  “array value 1”,
  “array value 2”,
  3
]
}


目前json_encode對中文字只能用utf8,要特別注意這點。最後取回時在Javascript 執行eval()即可使用了

var test= eval(“(“+ jsonstr + “)”)


那再來如果使用的PHP版本非5.2之後,可以考慮其它人家寫好的套件,像PHP-json 算是library 如果不是自己架設的web server,可能就很不方便了,這裡有一篇網誌 石頭閒語:PHP::JSON
in PHP – 樂多日誌
有在介紹請自行參考
。除此之外,也可以使用Services_JSON (BSD license),或者是Zend-Json (New BSD license)。不過Zend的Framework,在官網顯示PHP版本不能低於5.1.4,建議使用5.2.3以上的版本,所以看來幫助不大。

如果是php4的,可以參考以下兩篇,都有合適的lincude 函式庫可以使用:


相關參考資料:
http://nervstudio.blogspot.com/2007/02/ajaj-php-json-javascript.html

Categories: PHP Tags: , ,

JSON & JSONP 簡介

2009年1月4日 尚無評論

最近在學習Jquery,就常看到JSON及JSONP,只知道他是資料的集合,其它都不太瞭解,所以上網搜尋了一下,整了名詞解釋,希望能更瞭解一點。

JSON(Javascript Object Notation)
JSON(Javascript Object Notation)是一種輕量級的資料交換語言,以文字為基礎,且易於讓人閱讀。
他本來就算在javascript標準裡,JSON是獨立於語言的文字格式,並且採用了類似於C語言家族的一些習慣。JSON格式是1999年JavaScript
Programming Language, Standard ECMA-262 3rd Edition
》的子集合,所以可以在JavaScripteval()函式(javascript通過eval()調用解釋器)讀入。不過這並不代表JSON無法使用於其他語言,目前幾乎所有與網頁開發相關的語言都有JSON函式庫。

JSON,是一種描述javascript裡物件還有陣列(js的陣列其實也是物件啦)的一種簡略表示方法,用於描述數據結構,其結構有名稱/值 及陣列,像是下面這個範例就是JSON格式:

//Javascript
var test={
"x":1,
"y":2,
"str":"test",
"a":[
"array value 1",
"array value 2",
3
],
obj_array:[{
xx:0,
xxx:2
},{
xx:3,
xxx:5
}
]
};

由於JSON在語法上是JavaScript的子集合,所以一般都會使用eval()作為讀取資料的方式,這在JSON資料提供站台與使用站台都屬於可信賴時並不會有問題。但如果資料提供站台不在信任範圍內,將JavaScript程式碼嵌入JSON,則會造成安全上的問題。

另外一個安全上的問題則是跨站存取(Cross-site request
forgery,簡稱CSRF或XSRF)。這個問題在Javascript中的狀況是,由於Javascript採用了稱為「沙盒」的機制,這種機制限制Javascript引擎僅能引入同一個站點的代碼,因而某種程度上提高了安全性。

官方網站:http://www.json.org

JSONP(JSON with Padding)
什麼是JSONP:JSONP(JSON with Padding)是一個非官方的協議,它允許在服務器端集成Script
tags返回至客戶端,通過javascript
callback的形式實現跨域訪問(這僅僅是JSONP簡單的實現形式)。
由於 JSON 只是一種含有簡單括號結構的純文本,因此許多通道都可以交換 JSON
消息。因為同源策略的限制(上述提到的安全性問題),我們不能在與外部服務器進行通信的時候使用
XMLHttpRequest。而JSONP是一種可以繞過同源策略的方法
,即通過使用 JSON 與 <script>
標記相結合的方法
,從服務端直接返回可執行的JavaScript函數調用或者
JavaScript對象。

JSONP的原理很簡單,但需要服務器端給予相應配合。大致來說,JSONP的實現思路就是在客戶端編程時作好使用JSON數據的準備,然後再通過圓括號將這些數據括起來以創建一條有效的JavaScript語句(可能是一次有效的函數調用)。

也就是說,客戶端可以使用一個用於命名jsonp的查詢參數來決定可以獲取的數據。最簡單的情況下,如果jsonp參數為空,則返回的數據就是被括在圓括號中的JSON。

目前已經有很多open的framework 有採用JSONP:dojoJQueryYoutube
GData API
Google Social Graph API Digg APIGeoNames webservice豆瓣APIDel.icio.us JSON API

JSONP只是解決了標準化的問題,但假如遠程主機想通過script標籤向頁面中注入惡意代碼,而不是返回JSON數據,那麼網站還是可能會隨時受到威脅。不過,一旦實現了JSONP,那麼對開發人員來說肯定是一件省時省力的大好事,在此基礎上各種一般化的抽像、教程及文檔也會應運而生的。 我們可以使用若干種方法在 JavaScript 程序中動態地生成代碼。因此在要進行eval()前,可以利用下面的正則表達式檢查 JSON 字符串看是不是有危安成份:


var my_JSON_object = !(/[^,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]/.test(
           text.replace(/"(\\.|[^"\\])*"/g, '' ''))) &&
           eval(''('' + text + '')'');


參考資料:
http://diary.tw/tim/22
http://zh.wikipedia.org/wiki/JSON#.E8.B7.A8.E7.AB.99.E5.AD.98.E5.8F.96.E5.95.8F.E9.A1.8C
http://www.cn-cuckoo.com/2008/09/13/the-origin-of-jsonp-262.html
http://www.matrix.org.cn/resource/article/2008-03-06/b2e0ea4e-eb69-11dc-91da-b599c3ba16ef.html

Categories: Java Script Tags: , ,