Как создать действительный пример JSON из схемы Avro? - PullRequest
0 голосов
/ 08 мая 2018

Получена довольно сложная схема Avro (которую я не могу изменить).

Попытка смоделировать пример JSON в Java:

GenericRecord genericRecord = AvroUtil.jsonToGenericRecord(jsonData, avroSchema);

Не удается:

Exception in thread "main" org.apache.avro.AvroTypeException: Expected start-union. Got VALUE_STRING

Есть, например, онлайн инструмент, который предоставит пример данных JSON для любой данной схемы Avro? (чтобы он мог соответствовать правильно)

Пробовал издеваться над данными JSON в течение нескольких часов, но все еще безуспешно.

1 Ответ

0 голосов
/ 08 мая 2018

Вы можете создать случайные данные, используя trevni зависимость и область тестирования. Вот вам пример кода

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

import java.util.Iterator;

public class JSONExample {
    public static void main(String [] args){
        Schema schema = new Schema.Parser().parse("{\n" +
                "     \"type\": \"record\",\n" +
                "     \"namespace\": \"com.acme\",\n" +
                "     \"name\": \"Test\",\n" +
                "     \"fields\": [\n" +
                "       { \"name\": \"name\", \"type\": \"string\" },\n" +
                "       { \"name\": \"age\", \"type\": \"int\" },\n" +
                "       { \"name\": \"sex\", \"type\": \"string\" },\n" +
                "       { \"name\": \"active\", \"type\": \"boolean\" }\n" +
                "     ]\n" +
                "}");

        Iterator<Object> it = new RandomData(schema, 1).iterator();
        System.out.println(it.next());
    }
}

выход

{"name": "cjnyvbmetf", "age": -1757126879, "sex": "", "active": false}

maven зависимости

<dependencies>
    <dependency>
        <groupId>org.apache.avro</groupId>
        <artifactId>avro</artifactId>
        <version>1.8.2</version>
    </dependency>
    <dependency>
        <groupId>org.apache.avro</groupId>
        <artifactId>trevni-core</artifactId>
        <classifier>tests</classifier>
        <version>1.8.2</version>
    </dependency>
    <dependency>
        <groupId>org.apache.avro</groupId>
        <artifactId>trevni-avro</artifactId>
        <classifier>tests</classifier>
        <version>1.8.2</version>
    </dependency>
</dependencies>
...