【问题标题】:Convert Avro Schema to JSON payload with values将 Avro Schema 转换为带有值的 JSON 有效负载
【发布时间】:2021-04-28 16:16:17
【问题描述】:

我有一个 org.apache.avro.Schema 对象。而且我需要创建一个 JSON 完整有效负载,其中包含字段中的值。 我宁愿说我有解决方案,使用这个post

但是

RandomData.generate 方法中的逻辑很难理解,调试因为它使用递归:private Object generate(Schema schema, Random random, int d)

是否有人有任何其他实现以更易读的方式实现目标?我将研究除 RandomData 实现之外的其他解决方案。

【问题讨论】:

    标签: java json avro


    【解决方案1】:

    如果您对使用 Python 没问题,最近添加了一个功能可以满足您的需求。你应该可以pip install fastavro 然后运行类似下面的脚本:

    from fastavro import json_writer
    from fastavro.utils import generate_many
    from io import StringIO
    
    schema = {
        "namespace": "my.test",
        "name": "example_value_schema",
        "type": "record",
        "fields": [
            {
                "name": "field",
                "type": [
                    "null",
                    "int",
                    {
                        "type": "record",
                        "name": "my_field_type2",
                        "fields": [
                            {"name": "subfield", "type": "string"},
                            {"name": "bytes_field", "type": "bytes"},
                            {"name": "array_field", "type": {"type": "array", "items": "string"}},
                        ]
                    }
                ]
            }
       ]
    }
    
    sio = StringIO()
    
    json_writer(sio, schema, generate_many(schema, 6))
    
    print(sio.getvalue())
    
    

    我运行它时的输出如下:

    {"field": null}
    {"field": {"int": 1903741208}}
    {"field": {"my.test.my_field_type2": {"subfield": "TXJrWrluTg", "bytes_field": "\u0084\u008fEf\u0014\u00f4U\u00ba\u00f4]", "array_field": ["zdXQkoeFQv", "SCWCJmMsOd", "HeISJlaUoE", "qxptYDFfsb", "TcOiaLrXDA", "vOyWPySldE", "HOoeLYRVhS", "lUjhemxuSQ", "fiBdeeUSpZ", "AqTBRFpNoU"]}}}
    {"field": null}
    {"field": {"int": 1048727191}}
    {"field": {"my.test.my_field_type2": {"subfield": "jzZYVZMdXq", "bytes_field": "\u0098Y\u00c5\u00f1\u0095\u009b\u00fd\u008bU]", "array_field": ["xyPsFLOhDp", "lSIWrETtvP", "NHmfWoOCGI", "iqtjfwmQNd", "hlENhjDOse", "oMQpJPkgQY", "eoIRSOydWj", "UChETKEaAk", "JlqxqDrCyH", "RyrLAxoePf"]}}}
    

    您可以看到,对于联合案例,它将尝试为生成的每个随机记录循环遍历不同的联合案例。

    【讨论】:

    • 看起来不错,显然更具可读性 - 对 python 解决方案很有用。但我正在寻找基于 java 的方法。无论如何,谢谢你的回答!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多