Python3操作Json文件碰到的几个问题
小结
使用Python3操作Json文件碰到的几个问题,进行了解决。
问题及解决
byte数组与str字符串之间不兼容
以下的几个问题都是由于字节数组和字符串之间类型不匹配导致的问题:
-
TypeError: can’t concat str to bytes
-
TypeError: keys must be str, int, float, bool or None, not bytes
-
TypeError: a bytes-like object is required, not ‘str’
-
Invalid type for parameter LoadBalancerArn, value: b’arn:aws:elasticloadbalancing:ap-southeast-1:123456789012:loadbalancer/app/spring-petclinic-rest-elb/8616ff3572df2ed3’, type: <class ‘bytes’>, valid types: <class ‘str’>
一般由以下几个办法解决:
-
如果是byte数组,需要转化为字符串,尝试使用以下办法
byte_array_to_convert.decode("utf-8")
或者str(byte_array_to_convert.decode("utf-8"))
-
如果是字符串,想要转换为byte数组,尝试使用以下办法
str_convert_to_byte_array.encode('utf-8')
没有Index属性
错误如下:
- AttributeError: ‘dict_keys’ object has no attribute ‘index’
解决办法,实际上是把这个变量转化为list
类型,例如:
Name=project_name + str(list(service_list.keys()).index(service)) + '-tg'
JSON.DUMP(S) & JSON.LOAD(S)
以下是一个示例:
#!/bin/python
import json
home = expanduser("~")
filename = home + '/.docker/config.json'
with open(filename, 'r+') as f:
data = json.load(f)
data["auths"] = {
hostname.decode("utf-8"): {
"auth": ecr_login_token.decode("utf-8")
}
}
f.seek(0)
f.write(json.dumps(data, indent=4))
f.truncate()
其中indent=4
是对Json文件进行美化。
参考
stackoverflow: json.dump() gives me “TypeError: keys must be a string”
JSON.DUMP(S) & JSON.LOAD(S)
Python.org: json — JSON encoder and decoder
stackoverflow: Convert bytes to a string in Python 3
Python JSON Pretty Print | Guide (With Examples)
stackoverflow: “TypeError: a bytes-like object is required, not ‘str’” when handling file content in Python 3
stackoverflow: AttributeError: ‘dict_values’ object has no attribute ‘index’
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!