bytes 类型的对象不可 JSON 序列化

问题描述 投票:0回答:3

函数返回一个字典,其中包含字节类型的数据。因为它在里面,它给出了一个字典,我无法进行简单的转换,使用

value.decode('ISO-8859-1')

我需要遍历整个字典及其内部数据来验证数据类型,以便用解码覆盖它。 为了进行模拟,我留下了一个返回相同错误的示例代码:

import json

dictionary ={ 
  "id": "04", 
  "name": "sunil", 
  "code": b"HR"
} 
      
json_object = json.dumps(dictionary, indent = 4) 
print(json_object)

我想将字典内的内部字节数据转换为一些 str,以便我可以生成 json 。

python json dictionary byte serializable
3个回答
0
投票
import json

dictionary ={ 
  "id": "04", 
  "name": "sunil", 
  "code": b"HR".decode('UTF-8')
} 
      
json_object = json.dumps(dictionary, indent = 4) 
print(type(json_object))

不确定您的字典是否有错误?但如果不尝试这个?


0
投票

我用这个递归函数解决了我的问题。

def decodeDictionary(dictionary):
    if type(dictionary) == dict:
        for key in dictionary.keys():
            dictionary[key] = decodeDictionary(dictionary[key])
    elif type(dictionary[key]) == bytes:
        dictionary = dictionary.decode('ISO-8859-1') 
    return dictionary

0
投票

之前的解决方案是正确的,但它存在局部变量的问题。它会返回一个错误: 无法访问未与值关联的局部变量“key”。

只需将代码修改为:

def decodeDictionary(dictionary):
if type(dictionary) == dict:
    for key in dictionary.keys():
        dictionary[key] = decodeDictionary(dictionary[key])
elif type(**dictionary**) == bytes:
    dictionary = dictionary.decode('ISO-8859-1') 
return dictionary
© www.soinside.com 2019 - 2024. All rights reserved.