Our Community is getting an upgrade! To get everything ready for the relaunch, we’ll be placing the site in read-only mode starting September 21st.
We really appreciate your understanding while we get things set up behind the scenes. Catch up on all the exciting details about the move here.
Need help or have questions? Drop us a line at [email protected]
Created on 07-15-2022 04:00 AM - edited 07-15-2022 05:41 AM
JsonTreeReader to CSV Writer produces MapRecord String for the inner Json.
Data
"id" : "aaaa",
"billingaddress" : {
"city" : null,
"country" : "CHINA",
"geocodeAccuracy" : null,
"latitude" : null,
"longitude" : null,
"postalCode" : null,
"state" : null,
"street" : null
}
Produces CSV out with MapRecord String attached.
aaaa|MapRecord[{country=CHINA, city=null, street=null, latitude=null, postalCode=null, geocodeAccuracy=null, state=null, longitude=null}]
Expected Output:
aaaa|{country=CHINA, city=null, street=null, latitude=null, postalCode=null, geocodeAccuracy=null, state=null, longitude=null}
I want to keep the inner JSON as-is in the CSV output. Any workarounds to this issue?
Created on 07-15-2022 05:22 AM - edited 07-15-2022 05:33 AM
Hi,
You can use FlattenJson processor to flatten your json before converting to CSV. The output Json after flattening will be something like this:
{
"id": "aaaa",
"billingaddress.city": null,
"billingaddress.country": "CHINA",
"billingaddress.geocodeAccuracy": null,
"billingaddress.latitude": null,
"billingaddress.longitude": null,
"billingaddress.postalCode": null,
"billingaddress.state": null,
"billingaddress.street": null
}
Another Option is to use JoltTransformJSON to flatten your json if you don't like the "billingaddress." prefix. You can use the following Jolt Spec:
[
{
"operation": "shift",
"spec": {
"id": "id",
"billingaddress": {
"*": "&"
}
}
}
]
Which will produce the following json:
{
"id" : "aaaa",
"city" : null,
"country" : "CHINA",
"geocodeAccuracy" : null,
"latitude" : null,
"longitude" : null,
"postalCode" : null,
"state" : null,
"street" : null
}
If you think this solves the issue please accept solution. Thanks
Created 07-15-2022 05:43 AM
@SAMSAL I need to retain the JSON format as-is in the output. I have updated the updated the expected output.
Expected Output:
aaaa|{country=CHINA, city=null, street=null, latitude=null, postalCode=null, geocodeAccuracy=null, state=null, longitude=null}
Created on 07-15-2022 06:05 AM - edited 07-15-2022 06:06 AM
In this case I would suggest ReplaceText processor with the Search Value set to:
(MapRecord|\[|\])
And Replacement Value is set to Empty String.This will produce the result:
aaaa|"{country=CHINA, city=null, street=null, latitude=null, postalCode=null, geocodeAccuracy=null, state=null, longitude=null}"
Created 07-18-2022 10:23 AM
@Althotta Has the reply helped resolve your issue? If so, please mark the appropriate reply as the solution, as it will make it easier for others to find the answer in the future. Thanks
Regards,
Diana Torres,Created 07-25-2022 02:26 AM
Not yet resolved. @SAMSAL solution is a potential workaround. Iam looking for a right solution why Convert produces this as i have few places to change.
Created 01-29-2023 08:49 AM
I had a similar issue, it happens because of nifi not being able to resolve the schema. You need to first create a schema and set the type of billing address as string and add it to avroschemaregistry and lastly configure your jsontreereader to use that schema