【问题标题】:json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)json.decoder.JSONDecodeError:预期值:第 1 行第 1 列(字符 0)
【发布时间】:2016-03-03 06:43:33
【问题描述】:

我正在尝试导入使用json.dumps 保存并包含推文坐标的文件:

{
    "type": "Point", 
    "coordinates": [
        -4.62352292, 
        55.44787441
    ]
}

我的代码是:

>>> import json
>>> data = json.loads('/Users/JoshuaHawley/clean1.txt')  

但每次我得到错误:

json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

我想最终提取所有坐标并将它们分别保存到不同的文件中,以便对其进行映射,但是这个看似简单的问题阻止了我这样做。我已经查看了类似错误的答案,但似乎无法将其应用于此。任何帮助将不胜感激,因为我对 python 比较陌生。

【问题讨论】:

    标签: python json


    【解决方案1】:

    json.loads() 采用 JSON 编码字符串,而不是文件名。您想改用json.load()(没有s)并传入一个打开的文件对象:

    with open('/Users/JoshuaHawley/clean1.txt') as jsonfile:
        data = json.load(jsonfile)
    

    open() 命令生成一个文件对象,json.load() 然后可以从中读取,从而为您生成解码的 Python 对象。 with 语句确保文件在完成后再次关闭。

    另一种方法是自己读取数据,然后将其传递给json.loads()

    【讨论】:

      【解决方案2】:

      我遇到了类似的错误:“期望值:第 1 行第 1 列(字符 0)”

      添加“myfile.seek(0)”对我有帮助,将指针移动到 0 字符

      with open(storage_path, 'r') as myfile:
      if len(myfile.readlines()) != 0:
          myfile.seek(0)
          Bank_0 = json.load(myfile)
      

      【讨论】:

      • 为什么要使用readlines() 根本?是的,从文件读取首先将读取位置放在文件末尾,因此需要回到开头。但如果你打开文件并使用json.load(),你一开始就不会处于那个位置。
      【解决方案3】:

      请使用此功能

      def read_json_file(filename):
          with open(filename, 'r') as f:
              cache = f.read()
              data = eval(cache)
          return data
      

      另一个函数

      def read_json_file(filename):
          data = []
          with open(filename, 'r') as f:
              data = [json.loads(_.replace('}]}"},', '}]}"}')) for _ in f.readlines()]
          return data
      

      【讨论】:

      • 放弃 EVAL 函数并使用 json.loads 对我来说是一种享受。感谢这个 Python 新手的提示,可以这么说。到目前为止,我可能已经编写了 3 个 Python 脚本。
      猜你喜欢
      • 2020-01-02
      • 2019-11-06
      • 1970-01-01
      • 1970-01-01
      • 2019-09-10
      • 2021-04-27
      • 1970-01-01
      • 2023-03-25
      • 2020-11-11
      相关资源
      最近更新 更多