使用Python3操作Json文件碰到的几个问题,进行了解决。
以下的几个问题都是由于字节数组和字符串之间类型不匹配导致的问题:
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')
错误如下:
解决办法,实际上是把这个变量转化为list
类型,例如:
Name=project_name + str(list(service_list.keys()).index(service)) + '-tg'
以下是一个示例:
#!/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’