簡體   English   中英

將 Avro Schema 轉換為帶有值的 JSON 有效負載

[英]Convert Avro Schema to JSON payload with values

我有一個 org.apache.avro.Schema 對象。 我需要創建一個帶有字段值的 JSON 完整有效負載。 我寧願說我有使用這篇文章的解決方案

RandomData.generate方法中的邏輯很難理解,調試因為它使用遞歸: private Object generate(Schema schema, Random random, int d)

有沒有人有任何其他實現以更易讀的方式實現目標? 我將研究除 RandomData 實現之外的其他解決方案。

如果您對使用 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"]}}}

您可以看到,對於聯合案例,它將嘗試為生成的每個隨機記錄遍歷不同的聯合案例。

不適用於所有情況,我的用例出現此錯誤 TypeError: unhashable type: 'UnionSchema'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM