当前位置: 首页 > 面试题库 >

如何使用“ json”模块一次读取一个JSON对象?

袁弘化
2023-03-14
问题内容

我有一个千兆字节的JSON文件。该文件由每个不超过几千个字符的JSON对象组成,但是记录之间没有换行符。

使用Python 3和json模块,如何一次将一个JSON对象从文件读入内存?

数据在纯文本文件中。这是类似记录的示例。实际记录包含许多嵌套的字典和列表。

以可读格式记录:

{
    "results": {
      "__metadata": {
        "type": "DataServiceProviderDemo.Address"
      },
      "Street": "NE 228th",
      "City": "Sammamish",
      "State": "WA",
      "ZipCode": "98074",
      "Country": "USA"
    }
  }
}

实际格式。新记录一个接一个地开始,没有任何中断。

{"results": { "__metadata": {"type": "DataServiceProviderDemo.Address"},"Street": "NE 228th","City": "Sammamish","State": "WA","ZipCode": "98074","Country": "USA" } } }{"results": { "__metadata": {"type": "DataServiceProviderDemo.Address"},"Street": "NE 228th","City": "Sammamish","State": "WA","ZipCode": "98074","Country": "USA" } } }{"results": { "__metadata": {"type": "DataServiceProviderDemo.Address"},"Street": "NE 228th","City": "Sammamish","State": "WA","ZipCode": "98074","Country": "USA" } } }

问题答案:

一般而言,将多个JSON对象放入一个文件会使该文件 无效,JSON损坏
。也就是说,您仍然可以使用JSONDecoder.raw_decode()method来解析数据。

当解析器找到它们时,以下将产生完整的对象:

from json import JSONDecoder
from functools import partial


def json_parse(fileobj, decoder=JSONDecoder(), buffersize=2048):
    buffer = ''
    for chunk in iter(partial(fileobj.read, buffersize), ''):
         buffer += chunk
         while buffer:
             try:
                 result, index = decoder.raw_decode(buffer)
                 yield result
                 buffer = buffer[index:].lstrip()
             except ValueError:
                 # Not enough data to decode, read more
                 break

该函数将从块中的给定文件对象中读取块buffersize,并使decoder对象从缓冲区解析整个JSON对象。每个解析的对象都交给调用者。

像这样使用它:

with open('yourfilename', 'r') as infh:
    for data in json_parse(infh):
        # process object

仅当您的JSON对象背对背写入文件且中间没有换行符时,才使用此选项。如果您 确实 有换行符,并且每个JSON对象都限于一行,那么您将拥有一个JSON
Lines文档



 类似资料:
  • 我有一个数千GB的JSON文件。该文件由JSON对象组成,每个对象不超过几千个字符,但记录之间没有换行符。 使用Python 3和json模块,如何一次从文件中读取一个json对象到内存中? 数据在纯文本文件中。这是一个类似记录的示例。实际记录包含许多嵌套字典和列表。 可读格式记录: 实际格式。新记录一个接一个地开始,没有任何中断。

  • 在Java(任何库)中,从像下面这样的json开始(具有嵌套字段、数组和嵌入文档): 然后应用以下jsonpath(作为示例,理想情况下是任何类型的jsonpath) 创建如下所示的json文档: 所以问题是:使用jsonpath不仅可以获取数据,还可以获取所有嵌套字段,并创建一个新的json作为输入的子集? 任何例子都像往常一样受到赞赏 注意:在对此进行了大量思考之后,我得出的结论是,我需要的是

  • 我相信我需要创建一个JsonReader对象并调用其中一个Json静态方法,但我在读取文件时遇到了问题。json。 创建读取器方法似乎要求输入是一个字符串。我应该继续尝试将我的整个JSON文件解释为字符串吗?

  • 问题内容: 我是JSON格式的新手,在阅读的教程中,我不太了解如何使用php进行解析。所以我有这个: 我想回显 坐标 和 reverseGeocode 。谁能请我朝正确的方向前进? 问题答案: 尝试跑步 您的示例JSON作为字符串在哪里。

  • 由于是一个对象,并且它有另一个对象,只能有字符串或数字字段,而不能有对象,如何扩展元化学以强制执行此操作。感谢任何帮助

  • 问题内容: 我对Json文件很陌生。如果我有一个包含多个json对象的json文件,例如: 我想将所有“时间戳记”和“有用性”提取到一个数据帧中: 有谁知道解决此类问题的一般方法? 问题答案: 使用json数组,格式为: 然后将其导入到您的python代码中 现在,数据的内容是一个带有字典的数组,字典表示每个元素。 您可以轻松访问它,即: