Andy's blog

If you always do what you've always done, you'll always get what you've always got.

0%

JSON介紹

參考資料:
JSON 格式與 JavaScript 解析教學範例 連結
❲筆記❳ JavaScript中物件(object)和JSON格式的轉換


JSON(JavaScript Object Notation):

是一種輕量級交換結構,存在目的在於讓資料與資料間能夠更方便解讀
而我們該如何取得json資料呢?最常見的就是政府公開資訊站 連結

格式:

JSON字串可以包含(物件)或陣列資料(Array)。就像下面範例:

1
2
3
4
5
6
7
8
9
10
11
var obj=[
123,
{
'objec':123,
'test':[
124,125,126
]
}
]

{"array": ["string", 10, 1.0, -1, true, false, null]}

注意部分:

  1. JSON就是一組字串
  2. 使用{ }建立物件時,JSON格式,該屬性名稱一定要有引號(非常重要!!)
  3. 若物件中的值為function,是無法透過JSON傳遞的。

JSON.stringify( ) 、JSON.parse( )介紹

JSON.parse( ) 連結
用來將JSON格式轉回物件或陣列
補充:JSON.parse() 不容許尾部有逗號
JSON.parse(‘[1, 2, 3, 4, ]’);
JSON.stringify( ) 連結
用來將物件或陣列轉回JSON格式,儲存在localStorage中


補充:

1.chrome上的 JSON套件
目的:幫助我們瀏覽上更為方便,不會很混亂
2.下載到本機後開啟json資料
https://jsoneditoronline.org/

json如何擷取格式呢?

Step1.先到公開資訊站
Step2.找尋想查詢資料 範例
Step3.按右鍵檢查網頁原始碼 將網頁資料複製
Step4.放入編輯器中,利用object、array特性擷取資料

1
2
3
var data=
{"success":true,"result":{"resource_id":"382000000A-000352-001"}}
console.log(data.result.records[0].ar);

問題集:
Q1:若本身就是以中文命名的物件
EX:” 地 點”(中間有空格)、”速限(km/h)”,這該如何抓取?

以下抓取會出現錯誤:
console.log(HsinchuSpeed[i].地 點)
console.log(HsinchuSpeed[i].速限(km/h))

A:可以透過 bracket notation 方法選取

1
2
3
4
5
6
7
8
9
10
var obj = {
蘋果:'red',
香蕉:'yellow'
}

// ERROR
// console.log(obj.蘋果);

// 正確
console.log(obj["蘋果"]);

Q2:為何else中,還要再寫一次變數,不然回出現undefined:undefined沒有下大雨
Q3:if函式中的var 是全域變數嗎?為何不能直接給else函式中使用?

1
2
3
4
5
6
7
8
9
10
11
12
13
var length = data.length;
for (var i = 0; i <length; i++) {
if(data[i].Rainfall6hr>5){
var County=data[i].County;
var Township=data[i].Township;
console.log(County+":"+Township+"下大雨");
}
else{
// var County=data[i].County;
// var Township=data[i].Township;
console.log(County+":"+Township+"沒有下大雨");
}
}

A2: 因為你變數宣告在 if 裡面,如果判斷式不成立時不會執行裡面的程式碼唷。應該要宣告在 if 之前,這樣 if else 的判斷式都能使用到 修改如下
A3:呈上一題,原因是因為沒有執行,所以也不會被宣告

1
2
3
4
5
6
7
8
9
10
11
12
var total = data.length;

for (i = 0; i < total; i++) {
var country = data[i].County;
var countrySite = data[i].SiteName;
if (data[i].Rainfall10min == 0) {
console.log(country + "的" + countrySite + "放晴了");
}
else if (data[i].Rainfall10min > 0) {
console.log(country + "的" + countrySite + "現在正在下雨");
}
}