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)