繁体   English   中英

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

[英]How to convert JSON string to Avro in Python?

有没有办法将 JSON 字符串转换为 Avro 而没有 Python 中的模式定义? 或者这是只有Java可以处理的东西?

我最近遇到了同样的问题,我最终开发了一个 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"}')

这应该有帮助:

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

有关更多信息,请查看此Avro Python 指南

Apache Avro™ 1.7.6 入门 (Python)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM