相关疑难解决方法(0)

我如何懒惰地从Python中的文件/流中读取多个JSON值?

我想从Python中的文件/流中读取多个JSON对象,一次一个.不幸的是json.load(),.read()直到文件结束; 似乎没有任何方法可以使用它来读取单个对象或懒惰地迭代对象.

有没有办法做到这一点?使用标准库是理想的,但如果有第三方库,我会使用它.

目前我将每个对象放在一个单独的行上并使用json.loads(f.readline()),但我真的不想这样做.

示例使用

example.py

import my_json as json
import sys

for o in json.iterload(sys.stdin):
    print("Working on a", type(o))
Run Code Online (Sandbox Code Playgroud)

in.txt

{"foo": ["bar", "baz"]} 1 2 [] 4 5 6
Run Code Online (Sandbox Code Playgroud)

示例会话

$ python3.2 example.py < in.txt
Working on a dict
Working on a int
Working on a int
Working on a list
Working on a int
Working on a int
Working on a int
Run Code Online (Sandbox Code Playgroud)

python serialization json

93
推荐指数
7
解决办法
6万
查看次数

如何使用 serde_json 从 JSON 数组内部流式传输元素?

我有一个 5GB JSON 文件,它是具有固定结构的对象数组:

[
  {
    "first": "John",
    "last": "Doe",
    "email": "john.doe@yahoo.com"
  },
  {
    "first": "Anne",
    "last": "Ortha",
    "email": "anne.ortha@hotmail.com"
  },
  ....
]
Run Code Online (Sandbox Code Playgroud)

我知道我可以尝试使用如何使用 Serde 使用顶级数组反序列化 JSON?中所示的代码来解析此文件。:

use serde::{Deserialize, Serialize};

#[derive(Serialize, Deserialize, Debug)]
struct User {
    first: String,
    last: String,
    email: String,
}

let users: Vec<User> = serde_json::from_str(file)?;
Run Code Online (Sandbox Code Playgroud)

有多个问题:

  1. 首先将其作为一个字符串整体读取
  2. 读取为字符串后,它将其转换为结构向量User(我不想要这样)

我尝试了如何从 Rust 中的文件/流中延迟读取多个 JSON 值?但它会在打印任何内容之前读取整个文件,并在循环内立即打印整个结构。我期待循环中一次有一个对象:

在此输入图像描述

理想情况下,(已解析的)用户对象的解析和处理应该在两个单独的线程/任务/例程中同时发生,或者通过使用通道同时发生。

rust serde-json

7
推荐指数
1
解决办法
2595
查看次数

标签 统计

json ×1

python ×1

rust ×1

serde-json ×1

serialization ×1