使用org.apache.avro.util.RandomData()从avro架构生成JSON示例消息不支持UNION类型

gblwokeq  于 2023-10-21  发布在  Apache
关注(0)|答案(1)|浏览(180)

这是我的Avro架构。

{
    "namespace": "example.avro",
    "type": "record",
    "name": "User",
    "fields": [
        {
            "name": "name",
            "type": "string"
        },
        {
            "name": "favorite_number",
            "type": ["int", "null"]
        },
        {
            "name": "favorite_color",
            "type": ["string", "null"]
        }
    ]
}

我的示例Java程序使用Avro v1.11.3生成随机JSON消息。

package org.example;

import org.apache.avro.Schema;
import org.apache.avro.util.RandomData;

import java.io.IOException;
import java.io.InputStream;
import java.util.Iterator;

public class MyTest {
    public static void main(String [] args) throws IOException {
        MyTest me = new MyTest();
        ClassLoader classLoader = me.getClass().getClassLoader();
        InputStream is = classLoader.getResourceAsStream("person.avsc");
        Schema schema = new Schema.Parser().parse(is);
        Iterator<Object> it = new RandomData(schema, 1).iterator();
        System.out.println(it.next());
    }
}

下面是生成的JSON消息。在验证模式时,它显然是一个无效的JSON。

{
    "name": "rymhxcnbcyohbtjmouegufvchxh",
    "favorite_number": 4211,
    "favorite_color": "red"
}

正确的和预期的JSON消息应该包含这样的UNION类型

{
    "name": "rymhxcnbcyohbtjmouegufvchxh",
    "favorite_number": {
        "int": 4211
    },
    "favorite_color": {
        "string": "red"
    }
}

所以,问题是如何生成一个JSON示例,包括UNION类型作为上面的正确输出。

weylhg0b

weylhg0b1#

虽然我还不能发表评论,但我想帮助:为什么需要JSON?您是否希望基于该JSON生成一条新记录?

相关问题