Python操作SQL中json格式的问题

1、json中的引号必须使用双引号

(在mysql中双引号和单引号可以互换,但不可混合使用,需成对出现。)
mysql支持存储json格式数据,但是写入时json内容中引号必须使用双引号,否则出现下述错误:

pymysql.err.OperationalError: (3140, ‘Invalid JSON text: “Missing a name for object member.” at position 1 in value for column ‘reviews_2020_copy1.s_index_test’.’)

因此在Python中将dict类型的数据嵌入到SQL中,在mysql中存储为json时,加入判断并使用json模块转化:

if isinstance(value,dict):
    value=json.dumps(value)

在mysql中直接写SQL,值为json:

UPDATE table_name 
SET column1='{"s_index":123456789}' #单双引号互换位置则会报错

2、json中的null值

Python生成带有null值的json:Python中的None等价于json中的null。

>>> dic={'name':'a','age':None}
>>> json.dumps(dic)
'{"name": "a", "age": null}'

3、json.dumps() 与 json.dump(); json.loads() 与 json.load()

json.dumps():将字典转换为json字符串
json.loads():将json字符串转化为字典

json.dump():将字典以json字符串形式写入json文件
json.load() :将json文件以dict形式读取
json.dump()示例:

f_t=open('data/CharData.json','w',encoding='utf-8')
json.dump(dic_all, f_t, cls=NpEncoder,ensure_ascii=False,indent=4)

代码部分参数解释:
1、解决中文写入json文件编码问题:
open()使用encoding=‘utf-8’
dump()使用ensure_ascii=False
2、解决写入文件换行问题:
dump()使用indent=4 (数字也可以定义其他值)
3、解决TypeError: Object of type int64 is not JSON serializable:
原因:json不识别int64数据类型(numpy、DataFrame中数据类型)
解决:
1)自定义数据转换类NpEncoder
2)dump()使用cls=NpEncoder

class NpEncoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, np.integer):
            return int(obj)
        elif isinstance(obj, np.floating):
            return float(obj)
        elif isinstance(obj, np.ndarray):
            return obj.tolist()
        else:
            return super(NpEncoder, self).default(obj)

你可能感兴趣的:(mysql,python,json)