如何在Python中将JSON字符串转换为Avro?

10 投票
3 回答
24361 浏览
提问于 2025-04-17 22:08

有没有办法在Python中把一个JSON字符串转换成Avro格式,而不需要定义模式(schema)?还是说这只能用Java来做?

3 个回答

0

这应该能帮到你:

b = BytesIO(b'some message')
reader = DataFileReader(b, DatumReader())

想了解更多信息,可以看看这个 Avro Python 指南

11

我最近也遇到了同样的问题,于是我开发了一个Python包,这个包可以处理任何Python的数据结构,包括解析后的JSON,并且可以把它存储到Avro格式中,而不需要专门的模式。

我在Python 3上进行了测试。

你可以通过 pip3 install rec-avro 来安装它,或者查看代码和文档,地址是 https://github.com/bmizhen/rec-avro

使用示例:

from fastavro import writer, reader, schema
from rec_avro import to_rec_avro_destructive, from_rec_avro_destructive, rec_avro_schema

def json_objects():
    return [{'a': 'a'}, {'b':'b'}]

# For efficiency, to_rec_avro_destructive() destroys rec, and reuses it's
# data structures to construct avro_objects 
avro_objects = (to_rec_avro_destructive(rec) for rec in json_objects())

# store records in avro
with open('json_in_avro.avro', 'wb') as f_out:
    writer(f_out, schema.parse_schema(rec_avro_schema()), avro_objects)

#load records from avro
with open('json_in_avro.avro', 'rb') as f_in:
    # For efficiency, from_rec_avro_destructive(rec) destroys rec, and 
    # reuses it's data structures to construct it's output
    loaded_json = [from_rec_avro_destructive(rec) for rec in reader(f_in)]

assert loaded_json == json_objects()

要把一个JSON字符串转换成JSON对象,可以使用 json.loads('{"a":"b"}')

-5

这是一个关于如何开始使用Apache Avro的指南,特别是针对Python编程语言的。你可以通过点击上面的链接来查看详细信息。

import avro.schema
avro.schema.parse(json_schema_string)

撰写回答