[
https://issues.apache.org/jira/browse/NIFI-969?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15648166#comment-15648166
]
ASF GitHub Bot commented on NIFI-969:
-------------------------------------
Github user olegz commented on a diff in the pull request:
https://github.com/apache/nifi/pull/1179#discussion_r87039137
--- Diff:
nifi-nar-bundles/nifi-avro-bundle/nifi-avro-processors/src/test/java/org/apache/nifi/processors/avro/TestConvertAvroToJSON.java
---
@@ -239,6 +239,37 @@ public void
testSingleSchemalessAvroMessage_wrapSingleMessage_noContainer() thro
}
@Test
+ public void
testSingleSchemalessAvroMessage_wrapSingleMessage_noContainer_StandardJson()
throws IOException {
+ final TestRunner runner = TestRunners.newTestRunner(new
ConvertAvroToJSON());
+ runner.setProperty(ConvertAvroToJSON.CONTAINER_OPTIONS,
ConvertAvroToJSON.CONTAINER_NONE);
+ runner.setProperty(ConvertAvroToJSON.WRAP_SINGLE_RECORD,
Boolean.toString(true));
+ Schema schema = new Schema.Parser().parse(new
File("src/test/resources/user.avsc"));
+ String stringSchema = schema.toString();
+ runner.setProperty(ConvertAvroToJSON.SCHEMA, stringSchema);
+ runner.setProperty(ConvertAvroToJSON.USE_STANDARD_JSON, "true");
+
+ final GenericRecord user1 = new GenericData.Record(schema);
+ user1.put("name", "Alyssa");
+ user1.put("favorite_number", 256);
+
+ final ByteArrayOutputStream out1 = new ByteArrayOutputStream();
+ final BinaryEncoder encoder =
EncoderFactory.get().binaryEncoder(out1, null);
+ final DatumWriter<GenericRecord> datumWriter = new
GenericDatumWriter<>(schema);
+ datumWriter.write(user1, encoder);
+
+ encoder.flush();
+ out1.flush();
+ byte[] test = out1.toByteArray();
+ runner.enqueue(test);
+
+ runner.run();
+
+
runner.assertAllFlowFilesTransferred(ConvertAvroToJSON.REL_SUCCESS, 1);
+ final MockFlowFile out =
runner.getFlowFilesForRelationship(ConvertAvroToJSON.REL_SUCCESS).get(0);
+
out.assertContentEquals("{\"name\":\"Alyssa\",\"favorite_number\":{\"int\":256},\"favorite_color\":null}");
--- End diff --
@mattyb149 Not sure, but that is what is outputted by _JSONEncoder_ and as
you can see it's different then the result of _toString()_. Perhaps it needs to
be flipped where _toString()_ is in fact standard JSON and __JSONEncoder_
provides AVRO JSON. Thoughts?
> Add option to use standard JSON or Avro-JSON to ConvertAvroToJSON
> -----------------------------------------------------------------
>
> Key: NIFI-969
> URL: https://issues.apache.org/jira/browse/NIFI-969
> Project: Apache NiFi
> Issue Type: Improvement
> Components: Extensions
> Affects Versions: 0.3.0
> Reporter: Ryan Blue
> Assignee: Oleg Zhurakousky
>
> ConvertAvroToJSON uses {{GenericData#toString(GenericRecord)}} to convert to
> JSON. This produces
> [Avro-JSON|https://avro.apache.org/docs/1.7.7/spec.html#json_encoding], which
> probably isn't what most users want because it adds an unexpected layer for
> Avro union types:
> bq. the union schema {{["null","string",...]}} ... would encode: the string
> {{"a"}} as {{{"string": "a"}}} ...
> It would be good to have a conversion that doesn't add those layers as an
> option.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)