【问题标题】:ValueError: No JSON object could be decoded for a valid JSON fileValueError:无法为有效的 JSON 文件解码任何 JSON 对象
【发布时间】:2018-05-04 18:00:38
【问题描述】:

我有一个大小为 109 Mgb 的有效 JSON 文件,格式如下。

[{"sensorType":"Radarcape","sensorLatitude":{"double":51.758894},"sensorLongitude":{"double":-1.256654},"sensorAltitude":{"double":200.0},"timeAtServer":1.429617600000027E9,"timeAtSensor":null,"timestamp":{"double":9.68628281E8},"rawMessage":"8d4008f999059a90c09719d7b430","sensorSerialNumber":13020235,"RSSIPacket":{"double":52.0},"RSSIPreamble":null,"SNR":null,"confidence":null}
,{"sensorType":"Radarcape","sensorLatitude":{"double":51.758894},"sensorLongitude":{"double":-1.256654},"sensorAltitude":{"double":200.0},"timeAtServer":1.429617600001544E9,"timeAtSensor":null,"timestamp":{"double":9.74843812E8},"rawMessage":"8f406a9a5913d2d51fbe8ab14fdf","sensorSerialNumber":13020235,"RSSIPacket":{"double":72.0},"RSSIPreamble":null,"SNR":null,"confidence":null}]

读取JSON文件的简单代码:

import json

with open ("jsonfile.txt",'r') as f:

        j=json.load(f)

我正在尝试解析它以将其转换为 SQLite 格式。但是,每次我收到以下消息错误。

Traceback (most recent call last):
  File "C:/Users/PycharmProjects/jsontosqlite/test.py", line 5, in <module>
    a=json.loads("newfile.json")
  File "C:\Python27\lib\json\__init__.py", line 339, in loads
    return _default_decoder.decode(s)
  File "C:\Python27\lib\json\decoder.py", line 364, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "C:\Python27\lib\json\decoder.py", line 382, in raw_decode
    raise ValueError("No JSON object could be decoded")
ValueError: No JSON object could be decoded

【问题讨论】:

  • json.loads 应该传递一个文件对象而不是文件名。 with open('newfile.json') as f: json.loads(f)

标签: python json parsing


【解决方案1】:

如果我将(完全)您问题中显示的 JSON 数据放入 jsonfile.txt 文件并运行它,则以下内容对我有用:

import json

with open ("jsonfile.txt", 'r') as f:
    j = json.loads(f.read())

print(json.dumps(j, indent=4))

输出:

[
    {
        "sensorType": "Radarcape",
        "sensorLatitude": {
            "double": 51.758894
        },
        "sensorLongitude": {
            "double": -1.256654
        },
        "sensorAltitude": {
            "double": 200.0
        },
        "timeAtServer": 1429617600.000027,
        "timeAtSensor": null,
        "timestamp": {
            "double": 968628281.0
        },
        "rawMessage": "8d4008f999059a90c09719d7b430",
        "sensorSerialNumber": 13020235,
        "RSSIPacket": {
            "double": 52.0
        },
        "RSSIPreamble": null,
        "SNR": null,
        "confidence": null
    },
    {
        "sensorType": "Radarcape",
        "sensorLatitude": {
            "double": 51.758894
        },
        "sensorLongitude": {
            "double": -1.256654
        },
        "sensorAltitude": {
            "double": 200.0
        },
        "timeAtServer": 1429617600.001544,
        "timeAtSensor": null,
        "timestamp": {
            "double": 974843812.0
        },
        "rawMessage": "8f406a9a5913d2d51fbe8ab14fdf",
        "sensorSerialNumber": 13020235,
        "RSSIPacket": {
            "double": 72.0
        },
        "RSSIPreamble": null,
        "SNR": null,
        "confidence": null
    }
]

【讨论】:

  • 非常感谢。有用。我想知道我写第一个代码的方式有什么问题?!
  • @jelmoodjasser $10 说在那个庞大的 json 文件中存在未转义的引号或其他一些非法字符。
  • jelmood:无法访问您尝试加载的实际文件,这是不可能的——尽管我不同意@Jared Smith。
猜你喜欢
  • 2015-01-04
  • 1970-01-01
  • 2016-01-09
  • 1970-01-01
  • 2023-03-12
  • 2015-03-29
  • 1970-01-01
  • 1970-01-01
  • 2018-10-04
相关资源
最近更新 更多