【问题标题】:Python - JSONDecodeError: Expecting property name enclosed in double quotesPython - JSONDecodeError:期望用双引号括起来的属性名称
【发布时间】:2020-09-05 20:23:32
【问题描述】:

我查看了该问题的现有答案,但找不到我的具体问题。我正在尝试解析我 认为 是有效的 JSON 对象,但不知何故它拒绝了它。

我使用此代码将数据从 API 响应转储到文件中:

def write_video_ids_to_file(video_ids, video_data_file):
    # Create file if it doesn't exist
    file_is_empty = is_file_empty(video_data_file)
    if file_is_empty:
        open(video_data_file, 'w').close()

    with open(video_data_file, 'a') as file:
        json.dump(video_ids, file, indent=4, sort_keys=True, default=str)
        print('collecting video ids')

下面这段代码试图从文件中加载 JSON 似乎失败了:

def construct_video_id_array(video_data_file):
    with open(video_data_file, 'r') as file:
        json_data = json.load(file) # <-- Failing here

    video_ids_separate = []
    for video in json_data:
        video_ids_separate.append(video['video_id'])

    return video_ids_separate

这是我的 JSON 数据示例(大约有 8 MB,所以我不会全部发布):

{[
    {
        "channel_id": "UC9CuvdOVfMPvKCiwdGKL3cQ",
        "collection_date": "2020-08-18 20:55:18.854967",
        "publish_date": 1597784402.0,
        "video_id": "5tBnaxQKpHQ"
    },
    {
        "channel_id": "UC9CuvdOVfMPvKCiwdGKL3cQ",
        "collection_date": "2020-08-18 20:55:18.854967",
        "publish_date": 1597698002.0,
        "video_id": "7J3H8ckUaYU"
    }
]}

原来开头和结尾都没有{,所以加了这些。我不确定这是否是正确的举动,但就其价值而言,不管有没有它都不起作用,只是抛出了不同的错误。

【问题讨论】:

  • 它是因为你说 json 加载文件对象使用:json.load(file.read())
  • 不,因为我没有使用带字符串的 json.loads() 。我正在使用带有文件对象的 json.load()。
  • 抱歉你写的。
  • 你的 json 无效我的帖子能回答你的问题吗

标签: python json


【解决方案1】:

您的 JSON 内容应如下所示:

{ "your_data":[
    {
        "channel_id": "UC9CuvdOVfMPvKCiwdGKL3cQ",
        "collection_date": "2020-08-18 20:55:18.854967",
        "publish_date": 1597784402.0,
        "video_id": "5tBnaxQKpHQ"
    },
    {
        "channel_id": "UC9CuvdOVfMPvKCiwdGKL3cQ",
        "collection_date": "2020-08-18 20:55:18.854967",
        "publish_date": 1597698002.0,
        "video_id": "7J3H8ckUaYU"
    }
]}

这是有效的。查看此网站:https://www.geeksforgeeks.org/json-load-in-python/https://jsonlint.com/

所有 JSON 数据都需要一个键,甚至是一个列表。

您的 JSON 对象也应如下所示:

{ "your_data":[
    {
        "channel_id": "UC9CuvdOVfMPvKCiwdGKL3cQ",
        "collection_date": "2020-08-18 20:55:18.854967",
        "publish_date": 1597784402.0,
        "video_id": "5tBnaxQKpHQ"
    },
    {
        "channel_id": "UC9CuvdOVfMPvKCiwdGKL3cQ",
        "collection_date": "2020-08-18 20:55:18.854967",
        "publish_date": 1597698002.0,
        "video_id": "7J3H8ckUaYU"
    }
]}

所以文件 json.dump 会将正确的 JSON 内容转储到文件中。

【讨论】:

  • 我如何在编写 JSON 的代码中以这种方式为对象命名?如果可能的话,我不想手动将此字段添加到我的文件中。
  • 你有多少个文件。我不知道抱歉,请尝试正则表达式
  • 抱歉,我不太明白您的要求。我的评论正确吗?
  • 好吧,我正在处理两个文件,但它们包含不同的数据。我只是想知道是否可以通过我的json.dump() 调用以不同方式转储 json 数据。它就像我发布的那样倾倒它,没有用键命名对象数组
  • 所以你有一个 json 对象并且你想把它放在一个文件中是正确的
猜你喜欢
  • 1970-01-01
  • 2017-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-04
  • 1970-01-01
  • 1970-01-01
  • 2021-04-12
相关资源
最近更新 更多