cancel
Showing results forย 
Search instead forย 
Did you mean:ย 

I'm completely stuck trying to write JSON to CSV - it's been 4 days. Can anyone help?

fatsnowball
New Contributor II

Iโ€™m brand new to Snaplogic and this is probably really easy - sorry in advance! But Iโ€™ve been stuck on this since Thursday, and itโ€™s now Tuesdayโ€ฆ please help me.

As a whole, I have this:

image

In more detail:

I have a JSON splitter, which has an output of the JSON I want to write to a CSV. And, if I preview the output in table view, it looks exactly like the CSV I want (I had an image here, but new users can only put one - sorry!). Previewing in JSON shows that itโ€™s, well, JSON.

After that, I have a CSV formatter, but I donโ€™t have anything configured in it. Should I? The output view for this is more or less empty, so this clearly isnโ€™t correct. Iโ€™ve tried JSON formatters and a million other things here. I just donโ€™t know.

Then I have my file writer (and as a bonus, I want only some of the fields from the JSON to be written to the CSV file).

I can do it in Python:

# Call the API
r = requests.get(url_to_call, headers = headers)
json_to_write = r.json()

# Open a file for writing
outfile = open(file_name,'w')
writer=csv.writer(outfile)

# Write CSV Header Row
writer.writerow(["Id", "FirstName", "LastName"])

# Loop through each line of the JSON; print key values needed
for x in json_to_write:
    writer.writerow([x["Id"],
                x["FirstName"],
                x["LastName"]])

I found this post on turning JSON to CSV by @dmiller and this post on writing a Twitter Query to a file, but as far as I can tell, those are just โ€œuse these snapsโ€ without showing how the snaps are configured, and Iโ€™ve tried those configurations of snaps.

Iโ€™m so lost. Any help appreciated.

9 REPLIES 9

In your CSVFormatter, youโ€™re using โ€˜$Usernameโ€™ as one of the header and the resulting output is a column of empty strings. I assume thatโ€™s what youโ€™re seeing to, yes? Note, that itโ€™s blank because there is no property named โ€˜Usernameโ€™ in the input document. There is a property named โ€˜userIdโ€™, though.

image

So, if you change the header to โ€˜$userIdโ€™, you should see data coming out of the CSVFormatter. If you want to change the name of the property, youโ€™ll need to use a Mapper snap, like so:

image

Iโ€™m wondering if you were expecting the order of the list of headers in the CSVFormatter to correspond to the order of the columns in the preview? Is that right? Or, perhaps, Iโ€™m reading too much into thisโ€ฆ

fatsnowball
New Contributor II

Oh hmmmmm yes I understand. What was throwing me off is that if you validate the pipeline than at every snap, like after the JSON splitter, if you click the green output doc in the snap connector on the right it shows the correct output , but the CSV formatterโ€™s green doc looks totally wrong (even after I fix the headers), so after it didnโ€™t work the first time, I never checked the actual CSV file again:

image

Iโ€™ll keep a note to myself not to trust what the formatters display.

Thank you so much!! Youโ€™re a hero.

Click where it says โ€œPreviewโ€ฆโ€ Youโ€™re dealing with BINARY (diamond shape) data at this point, so the normal view doesnโ€™t have the usual JSON data to show.

THATโ€™S A LINK?!! Itโ€™s gray and only underlined on hover and looks just like all the other (non-link) parts of the page; I didnโ€™t even think to try. Oh my goodness. Thank you!!

Thanks for the feedback, a bug has been logged.