Python json.loads失败,带“0”;ValueError:额外数据:“0”;但是可以处理虚拟数据

Python json.loads失败,带“0”;ValueError:额外数据:“0”;但是可以处理虚拟数据,python,json,Python,Json,我对json.loads()有问题。当我试图解码一个json字符串时,我得到一个错误。但是如果我用一个类似的伪字符串来测试它,它就会工作。这里有什么问题 代码: 输出: ++++++++update++++++++++ ###{"state":{"reported":{"hum":33.1,"temp":22.3,"relay":false,"pir":10964},"desired":{"hum":33.1,"temp":22.3,"pir":10964}}}### <type 'str

我对json.loads()有问题。当我试图解码一个json字符串时,我得到一个错误。但是如果我用一个类似的伪字符串来测试它,它就会工作。这里有什么问题

代码:

输出:

++++++++update++++++++++
###{"state":{"reported":{"hum":33.1,"temp":22.3,"relay":false,"pir":10964},"desired":{"hum":33.1,"temp":22.3,"pir":10964}}}###
<type 'str'>
###{"state":{"reported":{"hum":33.2,"temp":22.3,"relay":false,"pir":10964},"desired":{"hum":33.2,"temp":22.3,"pir":10964}}}###
<type 'str'>
Exception in thread Thread-1:
Traceback (most recent call last):
  File "/usr/lib/python2.7/threading.py", line 810, in __bootstrap_inner
    self.run()
  File "/usr/lib/python2.7/threading.py", line 763, in run
    self.__target(*self.__args, **self.__kwargs)
  File "/usr/local/lib/python2.7/dist-packages/AWSIoTPythonSDK/core/protocol/internal/workers.py", line 147, in _dispatch
    self._dispatch_one()
  File "/usr/local/lib/python2.7/dist-packages/AWSIoTPythonSDK/core/protocol/internal/workers.py", line 154, in _dispatch_one
    self._dispatch_methods[event_type](mid, data)
  File "/usr/local/lib/python2.7/dist-packages/AWSIoTPythonSDK/core/protocol/internal/workers.py", line 237, in _dispatch_message
    message_callback(None, None, message)  # message_callback(client, userdata, message)
  File "sensord.py", line 43, in sensor_update
    sensor_bath = json.loads(message.payload)
  File "/usr/lib/python2.7/json/__init__.py", line 338, in loads
    return _default_decoder.decode(s)
  File "/usr/lib/python2.7/json/decoder.py", line 369, in decode
    raise ValueError(errmsg("Extra data", s, end, len(s)))
ValueError: Extra data: line 1 column 121 - line 1 column 122 (char 120 - 121)
+++更新++++++++++
###{“状态”:{“报告”:{“哼哼”:33.1,“临时”:22.3,“中继”:假,“pir”:10964},“期望”:{“哼哼”:33.1,“临时”:22.3,“pir”:10964}}###
###{“状态”:{“报告”:{“哼哼”:33.2,“临时”:22.3,“中继”:假,“pir”:10964},“期望”:{“哼哼”:33.2,“临时”:22.3,“pir”:10964}}###
线程1中的异常:
回溯(最近一次呼叫最后一次):
文件“/usr/lib/python2.7/threading.py”,第810行,在引导程序内部
self.run()
文件“/usr/lib/python2.7/threading.py”,第763行,运行中
自我目标(*自我参数,**自我参数)
文件“/usr/local/lib/python2.7/dist-packages/AWSIoTPythonSDK/core/protocol/internal/workers.py”,第147行,在
自我分配
文件“/usr/local/lib/python2.7/dist packages/AWSIoTPythonSDK/core/protocol/internal/workers.py”,第154行,第1行
自调度方法[事件类型](mid,数据)
文件“/usr/local/lib/python2.7/dist packages/AWSIoTPythonSDK/core/protocol/internal/workers.py”,第237行,在调度消息中
消息回调(无,无,消息)#消息回调(客户端,用户数据,消息)
传感器更新中第43行的文件“sensord.py”
sensor_bath=json.loads(message.payload)
文件“/usr/lib/python2.7/json/_init__.py”,第338行,加载
返回\u默认\u解码器。解码
文件“/usr/lib/python2.7/json/decoder.py”,第369行,在decode中
raise VALUERROR(errmsg(“额外数据”,s,end,len)))
ValueError:额外数据:第1行第121列-第1行第122列(字符120-121)

第一个json.loads成功,但第二个失败。

第二个示例(本应引发异常的示例)在这里运行良好,因此在失败的
消息中还有一些内容(您没有发布)

实际上,错误消息在位置121-122处抱怨“额外数据”,而打印的字符串只有120个字符长,因此在
message.payload
的末尾肯定有一些尾随的不可打印字符(或者不是由控制台/终端/IDE/任何东西打印)。您可以通过打印字符串的内部表示而不是其可读版本来检查这一点:

print("### '" + repr(message.payload) + "' ###")

一旦你发现了那些小精灵是什么,你就可以用
str.strip()
和适当的参数来除掉它们。

我不知道我的问题为什么会被否决,但我发现了问题所在。我的有效负载字符串后面有一个“\0”

“reported”:“hum”:33.1,
不是有效的json。复制数据时是否忘记了“{”字符?
print("### '" + repr(message.payload) + "' ###")