开发者社区 > 云原生 > Serverless > 正文

the JSON object must be str, bytes or bytearray, n

the JSON object must be str, bytes or bytearray, not 'dict'"

提示我这一句报错 evt = json.loads(event)

代码里加application/json了

提问27.png

提问28.png

展开
收起
学习娃 2023-06-07 12:10:10 512 0
5 条回答
写回答
取消 提交回答
  • 随心分享,欢迎友善交流讨论:)

    是的,这个错误提示通常是由于在阿里云函数计算中,event 参数的类型是 bytes 或 bytearray,需要先将其转换为 Python 对象,例如 dict,再进行处理。

    在您的代码中,可以尝试使用 json.loads 方法将 event 参数转换为 Python 对象,例如 dict,示例如下:

    import json

    def handler(event, context): evt = json.loads(event.decode('utf-8')) # 处理 evt 对象 在上面的代码中,首先使用 decode 方法将 event 参数转换为 str 类型,然后使用 json.loads 方法将其转换为 Python 对象,例如 dict,以便后续进行处理。

    另外,如果您在创建函数时选择了触发器类型为 HTTP 触发器,并在触发器配置中添加了 application/json 的 MIME 类型,则请求正文将被解析为 JSON 格式。此时,您可以直接使用 event 参数,无需进行解码和转换。例如:

    def handler(event, context): # 直接使用 event 参数 # 处理 event 对象 如果您使用的是其他触发器类型,则需要根据具体情况进行处理。

    2023-06-30 17:02:50
    赞同 展开评论 打赏
  • event 本身就是 map 吧,应该不需要 json.load,试下直接 evt = event 看看

    此答案来自钉钉群“阿里函数计算官网客户"

    2023-06-07 17:26:10
    赞同 展开评论 打赏
  • 错误的提示信息是"the JSON object must be str, bytes or bytearray, not 'dict'",这意味着 json.loads() 函数期望的是一个json字符串,而你传递给它的是一个字典对象。

    为了解决这个问题,你可以将字典对象转换为json字符串,然后再传递给 json.loads() 函数。其中,可以使用 json.dumps() 函数将一个Python对象序列化为json格式的字符串。修改代码如下:

    import json
    
    def handler(event, context):
        # 将字典对象转化为json字符串
        event_json = json.dumps(event)
        # 使用 json.loads() 函数解析json数据
        evt = json.loads(event_json)
        print(evt)
    

    注意:在更改代码后检查Content-Type是否仍为application/json。如果不是,请将其更改为此类型。

    2023-06-07 15:18:53
    赞同 展开评论 打赏
  • 根据报错信息来看,代码中尝试使用json.loads()方法将字典对象(dict)转换成 JSON 字符串。但是,该方法仅支持将字符串、字节和字节数组(str, bytes, bytearray)转换为 JSON 对象,而不是 Python 对象。因此,该报错表明您的代码使用了不正确的数据类型而导致程序出现异常。 在这种情况下,您需要先将 Python 对象转换为 JSON 字符串,然后再使用 json.loads() 方法来进行解析。可以使用 json.dumps() 方法将 Python 对象转换为 JSON 字符串。例如:

    import json
    
    # 创建一个 Python 对象
    my_dict = {'name': 'John', 'age': 25, 'city': 'New York'}
    
    # 将 Python 对象转换为 JSON 字符串
    my_json_string = json.dumps(my_dict)
    
    # 使用 json.loads() 方法将 JSON 字符串转换为 Python 对象
    new_dict = json.loads(my_json_string)
    
    在您的代码中,可以尝试这样修改:
    import json
    
    # 将 Python 对象转换为 JSON 字符串
    event_json_string = json.dumps(event)
    
    # 使用 json.loads() 方法将 JSON 字符串转换为 Python 对象
    evt = json.loads(event_json_string)
    
    

    以上修改可以确保您的代码使用正确的数据类型,并且能够正确地解析数据。

    2023-06-07 15:12:00
    赞同 展开评论 打赏
  • 从事java行业9年至今,热爱技术,热爱以博文记录日常工作,csdn博主,座右铭是:让技术不再枯燥,让每一位技术人爱上技术

    您好,根据错误提示来看是您在执行evt = json.loads(event)时传入的event数据格式不满足json格式标准,建议可以在json.loads(event)之前打印一下传入数据,方便排查一下数据格式是否是json格式。

    2023-06-07 13:57:25
    赞同 展开评论 打赏

快速交付实现商业价值。

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载