【发布时间】:2020-01-28 09:45:38
【问题描述】:
我正在尝试在 python 中解析一个文件 (filename.inc),它看起来像:
a: 2: {
s: 3: "somestuff";
a: 14: {
i: 601600;
a: 6: {
i: 559;
a: 4: {
s: 5: "label";
s: 3: "somelabel";
s: 2: "id";
s: 3: "559";
s: 10: "timestart";
s: 16: "01 01 1970 00:00";
s: 8: "timestop";
s: 16: "24 01 2020 20:55";
}
i: 18158;
a: 4: {
s: 5: "label";
s: 12: "someotherlabel";
s: 2: "id";
s: 5: "18158";
s: 10: "timestart";
s: 16: "01 01 1970 00:00";
s: 8: "timestop";
s: 16: "25 01 2020 18:55";
}
i: 10402;
a: 4: {
s: 5: "label";
s: 3: "newlabel";
s: 2: "id";
s: 5: "10402";
s: 10: "timestart";
s: 16: "01 01 1970 00:00";
s: 8: "timestop";
s: 16: "26 01 2020 06:55";
}
等等…… 我尝试使用:
import json
with open('filename.inc') as json_file:
data = json.load(json_file)
但得到: ValueError:无法解码任何 JSON 对象
我尝试删除第一个冒号,添加引号,用逗号替换分号:
"a2": {
"s3": "somestuff",
"a14": {
"i": 601600,
"a6": {
"i": 559,
"a4": {
"s5": "label",
"s3": "somelabel",
"s2": "id",
"s3": "559",
"s10": "timestart",
"s16": "01 01 1970 00:00",
"s8": "timestop",
"s16": "24 01 2020 20:55",
}
"i": 18158,
"a4": {
"s5": "label",
"s12": "someotherlabel",
"s2": "id",
"s5": "18158",
"s10": "timestart",
"s16": "01 01 1970 00:00",
"s8": "timestop",
"s16": "25 01 2020 18:55",
}
"i": 10402,
"a4": {
"s5": "label",
"s3": "newlabel",
"s2": "id",
"s5": "10402",
"s10": "timestart",
"s16": "01 01 1970 00:00",
"s8": "timestop",
"s16": "26 01 2020 06:55",
}
但这给了我多个具有相同 ID 的键... 想把它变成一个带有标签的html文件,用beautifulsoup解析,但这样的文件似乎太复杂了。 如有任何提示,我将不胜感激,在此先感谢。
【问题讨论】:
-
它看起来像 PHP
serialize输出,但经过美化。试试看phpserialize 是否可以解决这个问题。我不知道多余的空格是否会造成伤害,您可能需要先取消美化。 -
绝对不是 JSON,也不是 Python 字典。你能告诉我们这是从哪里来的吗?或者您应该尝试查找并了解它是如何生成的,这可能有助于您了解如何解析它。
-
@Amadan,我必须承认我自己做了美化,使它更容易阅读^^ 起初,文件是:a:2:{s:3:"somestuff";a: 14:{i:601600;a:6:{i:559;a:4:{s:5:"label";s:3:"somelabel";s:2:"id";s:3:" 559";s:10:"timestart";s:16:"0101197000:00";s:8:"timestop";s:16:"2401202020:55";}i:18158;a:4:{s :5:"标签"
-
在这种情况下,
phpserialize.loads(source)(source是一个字节串)应该可以工作。 -
@BastienAntoine 实际上,它是一个每小时更新一次的文件,我认为它与 SQLite 导入有关,但不确定。无法真正说出它的来源,但我只能说我需要解析它;)感谢您的时间
标签: python json parse-error jsonparser