使用 json.load() 从文件加载时出现 Rospy JSONDecodeError
Rospy JSONDecodeError when loading from file with json.load()
我正在尝试将某个主题上发布的数据存储到 JSON 文件中,但我一直收到 JSONDecodeError。
DB = '/home/path/data.json'
f = open(DB, 'w+')
json_array = json.load(fp=f)
json_array.append(data)
json.dump(json_array, f)
f.close()
open()
命令成功创建文件。但是加载失败。我已经尝试 运行 将其与文件内容结合使用:[]
和 {}
,两者都给出了相同的异常:
[ERROR] [1637699609.562673]: bad callback: <function callback at 0x7fe36196b1f0>
Traceback (most recent call last):
File "/opt/ros/noetic/lib/python3/dist-packages/rospy/topics.py", line 750, in _invoke_callback
cb(msg)
File "/home/path/scripts/extract_info_node.py", line 43, in callback
json_array = json.load(fp=f)
File "/usr/lib/python3.8/json/__init__.py", line 293, in load
return loads(fp.read(),
File "/usr/lib/python3.8/json/__init__.py", line 357, in loads
return _default_decoder.decode(s)
File "/usr/lib/python3.8/json/decoder.py", line 337, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/usr/lib/python3.8/json/decoder.py", line 355, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
这不是真正的描述性的,我没有什么可继续的。订阅者 运行 的方式有什么不允许写入的吗?你甚至可以从回调函数中做到这一点吗?我刚刚开始在 ROS 中工作,所以对于更有经验的人来说它可能是简单或明显的。
.load()
需要一个 .read() 支持 文件。您只是打开文件进行阅读。试试这个:
f = open(DB, 'r+')
json_array = json.load(f)
另外请注意,如果您正在存储和重新阅读主题数据,我建议您使用 rosbag 进行查找。但是,这取决于您的实际应用。
我正在尝试将某个主题上发布的数据存储到 JSON 文件中,但我一直收到 JSONDecodeError。
DB = '/home/path/data.json'
f = open(DB, 'w+')
json_array = json.load(fp=f)
json_array.append(data)
json.dump(json_array, f)
f.close()
open()
命令成功创建文件。但是加载失败。我已经尝试 运行 将其与文件内容结合使用:[]
和 {}
,两者都给出了相同的异常:
[ERROR] [1637699609.562673]: bad callback: <function callback at 0x7fe36196b1f0>
Traceback (most recent call last):
File "/opt/ros/noetic/lib/python3/dist-packages/rospy/topics.py", line 750, in _invoke_callback
cb(msg)
File "/home/path/scripts/extract_info_node.py", line 43, in callback
json_array = json.load(fp=f)
File "/usr/lib/python3.8/json/__init__.py", line 293, in load
return loads(fp.read(),
File "/usr/lib/python3.8/json/__init__.py", line 357, in loads
return _default_decoder.decode(s)
File "/usr/lib/python3.8/json/decoder.py", line 337, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/usr/lib/python3.8/json/decoder.py", line 355, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
这不是真正的描述性的,我没有什么可继续的。订阅者 运行 的方式有什么不允许写入的吗?你甚至可以从回调函数中做到这一点吗?我刚刚开始在 ROS 中工作,所以对于更有经验的人来说它可能是简单或明显的。
.load()
需要一个 .read() 支持 文件。您只是打开文件进行阅读。试试这个:
f = open(DB, 'r+')
json_array = json.load(f)
另外请注意,如果您正在存储和重新阅读主题数据,我建议您使用 rosbag 进行查找。但是,这取决于您的实际应用。