JSON
JSON to dict
json.loads 用來轉換資料; json.load 用來讀檔。
import json
person = '{"name": "Bob", "languages": ["English", "French"]}'
person_dict = json.loads(person)
# Output: {'name': 'Bob', 'languages': ['English', 'French']}
print( person_dict)
# Output: ['English', 'French']
print(person_dict['languages'])
Dict to JSON
import json
person_dict = {'name': 'Bob',
'age': 12,
'children': None
}
person_json = json.dumps(person_dict)
# Output: {"name": "Bob", "age": 12, "children": null}
print(person_json)
Read JSON file
import json
with open('path_to_file/person.json', 'r') as f:
data = json.load(f)
# Output: {'name': 'Bob', 'languages': ['English', 'French']}
print(data)
Write JSON file
json.dump 用來寫檔案; json.dumps 用來轉換資料。
import json
person_dict = {"name": "Bob",
"languages": ["English", "French"],
"married": True,
"age": 32
}
with open('person.txt', 'w') as json_file:
json.dump(person_dict, json_file)
Print JSON
import json
person_string = '{"name": "Bob", "languages": "English", "numbers": [2, 1.6, null]}'
# Getting dictionary
person_dict = json.loads(person_string)
# Pretty Printing JSON string back
print(json.dumps(person_dict, indent = 4, sort_keys=True))
Access JSON
import json
json_data = '''
{
"students": [
{
"name": "David",
"age": 19,
"grades": {
"math": 90,
"english": 87
}
},
{
"name": "Harry",
"age": 21,
"grades": {
"math": 85,
"english": 95
}
}
]
}
'''
# Parse JSON Data
data = json.loads(json_data)
# To access a large dataset we can use `for loop`
for student in data["students"]:
name = student["name"]
math_mark = student["grades"]["math"]
english_mark = student["grades"]["english"]
average_mark = (math_mark + english_mark) / 2
print(f"{name}, Avarage Marks: {average_mark:.2f}")
# Output:
# David, Average Marks: 88.50
# Harry, Average Marks: 90.00
import json
original_data_file="students_data.json"
updated_data_file="students_data_updated.json"
# reading `JSON file`
with open(original_data_file,"r") as file:
students_result = json.load(file)
# Updating JSON Data
for student in students_result['students']:
print(student['name'])
if student['name'] == "Kabir":
student['name'] = "John"
grades = student['grades']
avarage_mark= sum(grades.values()) / len(grades)
student['avarage_mark'] = avarage_mark
# Saving updated data into a new file
with open(updated_data_file,"w") as file:
json.dump(students_result,file,indent=4)
Get JSON from URL
import requests, json
# Response will be saved here
weather_data="weather_data.json"
# Request to `openweathermap` API
api_key = "6423af6e554f98cf1e6b8c6a7700986b" #REPLACE_WITH_YOUR_API_KEY
location = "Dhaka"
url = f"https://api.openweathermap.org/data/2.5/weather?q={location}&appid={api_key}&units=metric"
# Response
response = requests.get(url)
# Get `Place` and `Temperature` from the Response
if response.status_code == 200:
json_data = response.json()
print(f"Place: {json_data['name']}, Temperature: {json_data['main']['temp']} celsius")
else:
print(f"Request failed with status code {response.status_code}")
# Save the Response to a file
with open(weather_data,"w") as file:
json.dump(json_data,file,indent=4)
# Output:
# Place: Dhaka, Temperature: 27.99 celsius
# Handling a JSONDecodeError in Python
from json import JSONDecodeError
import requests
resp = requests.get('https://reqres.in/api/users/page4')
try:
resp_dict = resp.json()
except JSONDecodeError:
print('Response could not be serialized')
Data Type
使用 json.loads 轉換資料型別時,要注意輸出的類型可能是 dict 或者 array,這要看原始JSON 的資料格式。
Python
object
dict
array
list
string
str
number (integer)
int
number (real)
float
true
True
false
False
null
N