# JavaScript - 陣列與物件混合應用 & JSON 資料格式
###### tags: `javascript` `array` `object` `JSON`
## 陣列與物件混合應用
### 讀取方式
* 讀取陣列裡面的物件資料 使用[]
* 讀取陣列裡面的物件資料的屬性 使用.
```javascript=
let market = [
{
bossName: 'Tom',
bananaNum: 6,
appleNum: 5,
isClose: false
},
{
bossName: 'John',
bananaNum: 9,
appleNum: 8,
isClose: false
}
]
console.log(market[0]);
console.log(market[0].bossName);
console.log(market[1].appleNum);
console.log(market[0].isClose);
```
## 資料交換格式 JSON
* 為資料庫的共通格式
* 資料格式 JSON 陣列+物件
* 目前 JSON 使用在 JavaScript、Java、Node.js 應用的情況比較多,PHP、C# 等開發的 WEB 應用主要還是使用 XML。
```json=
{
"firstName": "John",
"lastName": "Smith",
"sex": "male",
"age": 25,
"address":
{
"streetAddress": "21 2nd Street",
"city": "New York",
"state": "NY",
"postalCode": "10021"
},
"phoneNumber":
[
{
"type": "home",
"number": "212 555-1234"
},
{
"type": "fax",
"number": "646 555-4567"
}
]
}
```
### JSON 工具
* [JSONView 安裝](https://chrome.google.com/webstore/detail/jsonview/chklaanhfefbnpoihckbnefhakgolnmc?hl=zh-TW)
### OPEN DATA 開放資料官網網站
* [高雄 OPEN DATA 開放資料官網網站](https://data.kcg.gov.tw/)
## 如何篩選出自己想要的資料格式,並賦予到特定變數上
* [範例一 JSON 資料](https://cdn.fs.teachablecdn.com/OCqdvvQ6CYXsJNFlPIgT)
```javascript=
let data = {paging: {…}, entries: Array(13)}
console.log(data);
>entries: (13) [{…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}]
>paging: {limit: 100, offset: 0, total: 13}
console.log(data.paging.limit);
>100
console.log(data.entries[1].title);
>公告受理申請『110年度高雄市補助辦理照顧服務員用人單位自訓自用訓練計畫』,自即日起至110年3月2日(星期二)下午5時止,有關申請注意事項,請詳閱本案公告。
let ary = data.entries;
console.log(ary);
>(13) [{…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}]
console.log(ary.length);
>13
console.log(ary[0].title);
>110年第1梯次產訓合作職前訓練錄取名單公告
```
* [範例二 JSON 資料](https://cdn.fs.teachablecdn.com/2oFNlRbaSb6M9oeiDM0z)
```javascript=
let data =
{
"contentType": "application/json; charset=utf-8",
"isImage": false,
"data": {
"XML_Head": {
"Listname": "1",
"Language": "C",
"Orgname": "397000000A",
"Updatetime": "2021/01/20 08:40:00",
"Infos": {
"Info": [
{
"Id": "C1_397000000A_000230",
"Status": "2",
"Name": "田寮月世界",
"Zone": "",
"Toldescribe": "田寮「月世界」特殊景觀在地理學上稱為「惡地」,是由於地殼的「回春作用」,經年累月的經由雨水與河水強烈侵蝕,將泥沙堆積在泥岩上,地層變動後,泥沙更與泥岩混合再經由風化、沉積作用,形成今日地貌,僅適於耐旱、耐鹽的淺根植物(如:箭竹)、濱海植物生長。從田寮到旗山台28線沿路除了月世界景觀,還有大小不等的二十多個泥火山,常呈現間歇性的噴發現象,噴發的規模則視地底天然氣與泥漿的累積壓力而定,噴發後的泥流堆積地區。",
"Description": "田寮「月世界」特殊景觀在地理學稱為「惡地」,經年累月由雨、河水侵蝕,將泥沙堆積在泥岩上,泥沙與泥岩混合經由風化形成。",
"Tel": "886-7-6367036",
"Add": "高雄市823田寮區崇德里月球路36號",
"Zipcode": "823",
"Travellinginfo": "無障礙交通:高鐵台南站 → 沙旗美月世界快線公車 → 月世界 → 旗山高鐵左營站 → 旗美快線公車 → 旗山 → 轉搭沙旗美月世界快線公車 → 月世界",
"Opentime": "遊客中心:09:00–17:00月世界:全天候開放",
"Gov": "397000000A",
"Px": "120.38898",
"Py": "22.88600"
},
{
"Id": "C1_397000000A_000234",
"Status": "2",
"Name": "西子灣風景區",
"Zone": "",
"Toldescribe": "西子灣以夕陽美景及天然礁石聞名,區內包括了西子灣海水浴場、海濱公園、打狗英國領事館....等景點;可觀海景、遠眺高雄港;海水浴場極富熱帶氣息、南國風情,每當夜幕低垂,晚霞的照耀,漁船燈火閃爍其間,呈現海天一色美景。",
"Description": "西子灣以夕陽美景及天然礁石聞名,區內包括了西子灣海水浴場、海濱公園、打狗英國領事館....等景點。",
"Tel": "886-7-5250005",
"Add": "高雄市804鼓山區蓮海路51號",
"Zipcode": "804",
"Travellinginfo": "搭高鐵至左營站下或搭臺鐵至高雄站下 → 轉搭高雄捷運至西子灣站下 → 轉搭高雄市公車(99路、橘1A路)至西子灣站下。",
"Opentime": "西子灣海水浴場:10:00–16:00",
"Gov": "397000000A",
"Px": "120.26391",
"Py": "22.62442"
}
]
}
}
},
"id": "b69ffff9-23a5-44a6-a398-089b11a5f84c",
"success": true
}
console.log(data.isImage);
//false
console.log(data.data.XML_Head.Infos.Info[0].Name);
//田寮月世界
console.log(data.data.XML_Head.Infos.Info[1].Opentime);
//西子灣海水浴場:10:00–16:00
```
## 陣列物件搭配 if 流程判斷練習
* [流程判斷圖線上版本](https://whimsical.com/4oYtsHWjADWsieeNrjY1Xa)
```javascript=
// Tom的個人狀態
let tomStatus = {
name: "Tom",
age: 30,
status: "", //狀態未知,先設為空字串
}
tomStatus.degree = 36.5;
if (tomStatus.degree >= 37.5) {
console.log("您不得進入");
//確定狀態後,將狀態值寫入屬性
tomStatus.status = "您不得進入";
} else {
console.log("您可以進入");
//確定狀態後,將狀態值寫入屬性
tomStatus.status = "您可以進入";
}
//
// 多名狀態
let peopleStatus = [
{
name: "Tom",
age: 30,
status: "", //狀態未知,先設為空字串
},
{
name: "mary",
age: 25,
status: "", //狀態未知,先設為空字串
},
{
name: "Kim",
age: 35,
status: "", //狀態未知,先設為空字串
}
]
peopleStatus[0].degree = 35;
peopleStatus[1].degree = 37.5;
peopleStatus[2].degree = 39;
console.log(peopleStatus[0]);
if (peopleStatus[0].degree >= 37.5) {
peopleStatus[0].status = "您不得進入";
console.log("您不得進入");
} else {
peopleStatus[0].status = "您可以進入";
console.log("您可以進入");
}
if (peopleStatus[1].degree >= 37.5) {
peopleStatus[1].status = "您不得進入";
console.log("您不得進入");
} else {
peopleStatus[1].status = "您可以進入";
console.log("您可以進入");
}
if (peopleStatus[2].degree >= 37.5) {
peopleStatus[2].status = "您不得進入";
console.log("您不得進入");
} else {
peopleStatus[2].status = "您可以進入";
console.log("您可以進入");
}
```