encoding
将字典中的中文正确的输出,可以将d转换成json字符串,转换时使用
json.dumps(d, ensure_ascii=False, encoding='utf-8')
python Json
from pymysql import *
from pymysql import cursors
import json
def getConn():
return connect(user='root',password='root',host='localhost',database='ssm',port=3306, cursorclass=cursors.DictCursor)
def queryBook():
resultArr=[]
conn = getConn()
if conn:
cursor= conn.cursor()
sql='select id ,title ,author, summary from book '
cursor.execute(sql)
results = cursor.fetchall()
for item in results:
# 将字典转化为 JSON 转 JSON 对象
jdata = json.dumps(item, ensure_ascii=False )
print(jdata)
resultArr.append(jdata)
else:
print('not found conn')
return resultArr
rarr = queryBook()
for sampleJson in rarr:
# 加载
item = json.loads(sampleJson )
with open("sampleJson.json", "a",encoding='utf-8') as write_file:
json.dump(sampleJson, write_file, indent=4, sort_keys=True, ensure_ascii=False)
json.dumps() 和 json.loads()
- 在Python中,可以使用 json.dumps() 和 json.loads() 这两个函数来实现JSON的序列化和反序列化。
# 字典转换为JSON
data = {'name': 'Bob', 'age': 25, 'city': 'San Francisco'}
json_data = json.dumps(data)
print(json_data)
# JSON转换为字典
parsed_data = json.loads(json_data)
print(parsed_data)
美化输出 json.dumps() 函数有一些参数可以用于美化输出,使JSON数据更易读。
示例代码:
美化输出
data = {'name': 'Bob', 'age': 25, 'city': 'San Francisco'}
json_data = json.dumps(data, indent=4, sort_keys=True)
print(json_data)
# 使用 indent 参数可以添加缩进,使JSON数据更加易读。sort_keys 参数可以按键对字典进行排序。
处理文件
json.dump() 和 json.load() 函数允许在读写文件时直接处理JSON数据。
- Python 使用
json.dump()
保存文件时中文会变成 Unicode。 - 在打开写出文件时加入
encoding="utf8",在dump时加入 ensure_ascii=False
即可解决。
# 写入JSON文件
data = {'name': 'Bob', 'age': 25, 'city': 'San Francisco'}
with open('data.json', 'w') as file:
json.dump(data, file)
# 读取JSON文件
with open('data.json', 'r') as file:
loaded_data = json.load(file)
print(loaded_data)
访问 Json 的嵌套对象,并输出 salary的值
sampleJson = """{
"company":{
"employee":{
"name":"emma",
"payble":{
"salary":7000,
"bonus":800
}
}
}
}"""
import json
sampleJson = """{
"company":{
"employee":{
"name":"emma",
"payble":{
"salary":7000,
"bonus":800
}
}
}
}"""
data = json.loads(sampleJson)
print(data['company']['employee']['payble']['salary'])
将类对象转化为 Json
import json
from json import JSONEncoder
class Vehicle:
def __init__(self, name, engine, price):
self.name = name
self.engine = engine
self.price = price
class VehicleEncoder(JSONEncoder):
def default(self, o):
return o.__dict__
vehicle = Vehicle("Toyota Rav4", "2.5L", 32000)
print("Encode Vehicle Object into JSON")
vehicleJson = json.dumps(vehicle, indent=4, cls=VehicleEncoder)
print(vehicleJson)
将 Json 转化为类对象
import json
class Vehicle:
def __init__(self, name, engine, price):
self.name = name
self.engine = engine
self.price = price
def vehicleDecoder(obj):
return Vehicle(obj['name'], obj['engine'], obj['price'])
vehicleObj = json.loads('{ "name": "Toyota Rav4", "engine": "2.5L", "price": 32000 }',
object_hook=vehicleDecoder)
print("Type of decoded object from JSON Data")
print(type(vehicleObj))
print("Vehicle Details")
print(vehicleObj.name, vehicleObj.engine, vehicleObj.price)
判断 Json 格式是否正确
import json
def validateJSON(jsonData):
try:
json.loads(jsonData)
except ValueError as err:
return False
return True
InvalidJsonData = """{ "company":{ "employee":{ "name":"emma", "payble":{ "salary":7000 "bonus":800} } } }"""
isValid = validateJSON(InvalidJsonData)
print("Given JSON string is Valid", isValid)
获取 JSON 中key为name的所有值
import json
sampleJson = """[
{
"id":1,
"name":"name1",
"color":[
"red",
"green"
]
},
{
"id":2,
"name":"name2",
"color":[
"pink",
"yellow"
]
}
]"""
data = []
try:
data = json.loads(sampleJson)
except Exception as e:
print(e)
dataList = [item.get('name') for item in data]
print(dataList)
django Json
Python Django中,要返回JSON
使用HttpResponse对象的json方法:可以在视图函数中使用HttpResponse对象的json方法将数据转换为JSON格式,然后将其作为响应返回给客户端。示例代码如下:
from django.http import HttpResponse
import json
def my_view(request):
data = {
'name': 'John',
'age': 30
}
return HttpResponse(json.dumps(data), content_type='application/json')
使用JsonResponse对象:Django提供了JsonResponse对象,可直接将Python数据结构转换为JSON并返回给客户端。示例代码如下:
from django.http import JsonResponse
def my_view(request):
data = {
'name': 'John',
'age': 30
}
return JsonResponse(data)
使用APIView类:如果你使用Django REST framework来构建API,可以在视图类中继承APIView类,并使用其内置的Response对象返回JSON数据。示例代码如下:
from rest_framework.views import APIView
from rest_framework.response import Response
class MyView(APIView):
def get(self, request):
data = {
'name': 'John',
'age': 30
}
return Response(data)