iT邦幫忙

2023 iThome 鐵人賽

DAY 9
0
SideProject30

python基礎及數據科學之應用系列 第 9

python基礎及數據科學之應用day 9[Python 匯出及匯入json]

  • 分享至 

  • xImage
  •  

昨天我介紹了python requests查詢天文台的方法,不知道大家有沒有嘗試用其他方法呢,今天將會講解json。

/images/emoticon/emoticon08.gif

什麼是JSON 檔案:

什麼是JSON 檔案:

JSON 代表 JavaScript 物件表示法,它是一種輕量級的資料交換格式,易於人類閱讀和編寫,也易於機器解析和生成。JSON 通常用於在伺服器和 Web 應用程式之間傳輸數據

也是python常用的儲存物件的內容。例如要訓練AI需要大量的數據,但總不能全部都放於python的字串或字典中,這樣會減低程式碼的可讀性,這時候json就是解決辦法

例如我們把昨天的查詢天氣放到txt檔,可讀性十分低,也不利於以後修改。下面是一個使用json的例孑。
需要用到上次分享的with open放法,如果忘記了可以去我之前的文章再看一次。

####小提示,json是python本身有的模組,不需另外安裝。

Python 匯入json內容


import json
import requests as req

url="https://data.weather.gov.hk/weatherAPI/opendata/weather.php"
data="warnsum"
lang="tc"

response = req.get(f"{url}?dataType={data}&lang={lang}")
n=eval(response.text)

#今天的主要內容
json_string = json.dumps(n, indent=2)
with open("data.json","w")as f:
    f.write(json_string)

print("done")

執行結果:

>done

data.json:

{
  "WTS": {
    "name": "\u96f7\u66b4\u8b66\u544a",
    "code": "WTS",
    "actionCode": "CANCEL",
    "issueTime": "2023-09-24T05:20:00+08:00",
    "expireTime": "2023-09-24T10:25:00+08:00",
    "updateTime": "2023-09-24T10:25:00+08:00"
  }
}
這樣子儲存便很方便,要用到的時候才把Unicode轉換成中文。方便電腦閱讀。

Indent可以放入其他數字,可以自行嘗試,但我個人認為2最適合閱讀。
為避免有人不明白程式碼,json.dumps()是一個json裏的功能,第一個變數是將你輸入的變數轉換成其他的格式,第二個變數使用來決定它的隔行。

小練習:

試從詳細天氣警報訊息中取得資料放入json檔案。

/images/emoticon/emoticon30.gif

答案:

import json
import requests as req

url="https://data.weather.gov.hk/weatherAPI/opendata/weather.php"
data="warningInfo"
lang="tc"

response = req.get(f"{url}?dataType={data}&lang={lang}")
n=eval(response.text)

json_string = json.dumps(n, indent=2)
with open("data.json","w")as f:
    f.write(json_string)

執行結果:

>

data.json:

{
  "details": [
    {
      "contents": [
        "\u96f7\u66b4\u8b66\u544a",
        "\u5929\u6587\u53f0\u57289\u670824\u65e5\u4e0a\u534810\u664225\u5206\u53d6\u6d88\u96f7\u66b4\u8b66\u544a\u3002"
      ],
      "warningStatementCode": "WTS",
      "updateTime": "2023-09-24T10:25:00+08:00"
    }
  ]
}

提示,data.json輸出的資料和我的可能會有所不同

Python 匯出json內容

我們在需要用到時便要把它匯出到python物件,下面是一個簡單的例子。

import json

#開啟json file
with open('data.json', 'r') as file:
    # 將json物件轉換成python物件
    data = json.load(file)

print(data)
print(data["WTS"]["name"]) #資料中的WTS的name項目

執行結果:

{'WTS': {'name': '雷暴警告', 'code': 'WTS', 'actionCode': 'CANCEL', 'issueTime': '2023-09-24T05:20:00+08:00', 'expireTime': '2023-09-24T10:25:00+08:00', 'updateTime': '2023-09-24T10:25:00+08:00'}}
雷暴警告

接下來便介紹json的物件類型:

以下面的json作為例子

{
   "name": "John Doe",
   "age": 30,
   "isStudent": false,
   "favoriteFruits": [
      "apple",
      "banana",
      "orange"
   ],
   "address": {
      "street": "123 Main St",
      "city": "New York",
      "country": "USA"
   }
}

首先name是一個類似python 字典的內容,而favoriteFruits儲存着三種變數,類似python的list,另外json也能儲存字串、布林值、數字,大家可以自行嘗試輸出變數,以熟習json的物件。

Json的物件大概有只有這些,但經常使用所以建議多訓練,如果覺得我的文章對你有幫助或有更好的建議,可以追蹤我,可以按讚和不妨在留言區提出,明天再見吧。bye

https://ithelp.ithome.com.tw/upload/images/20230924/201631734rYiIqTZNW.jpg
reference:
https://poe.com/


上一篇
python基礎及數據科學之應用day 8[Python基礎應用(Requests模組進階嘗試和webbrowser)]
下一篇
python基礎及數據科學之應用day 10[matplotlib圖表及長條圖]
系列文
python基礎及數據科學之應用30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言