How can I convert Json to data frame in R
Asked Answered
E

2

28

I'd like to convert my json data to data frame in R. Here is what I've done so far:

library("rjson")
result <- fromJSON(file ="mypath/data.json")
json_data_frame <- as.data.frame(result)

However, it comes to an error like this:

Error in data.frame(company_id = "12345678", country_name = "China", : arguments imply differing number of rows: 1, 2, 0

I also tried the following code:

library("rjson")
result <- fromJSON(file ="mypath/data.json")
final_data <- do.call(rbind, result)

And this error comes up:

Warning message: In (function (..., deparse.level = 1) : number of columns of result is not a multiple of vector length (arg 3)

I don't know what is going on here and how can I solve it. I will appreciate if I could get some help on this.

Here are some pieces of my json data:

{"business_id": "1234567", "Country_name": "China", "hours": {"Monday": {"close": "02:00", "open": "11:00"}, "Tuesday": {"close": "02:00", "open": "11:00"}, "Friday": {"close": "02:00", "open": "11:00"}, "Wednesday": {"close": "02:00", "open": "11:00"}, "Thursday": {"close": "02:00", "open": "11:00"}, "Sunday": {"close": "02:00", "open": "12:00"}, "Saturday": {"close": "02:00", "open": "12:00"}}, "open": true, "categories": ["Bars", "Nightlife", "Restaurants"], "city": "Beijing", "review_count": 5, "name": "Chen's Bar", "neighborhoods": ["West End"], "attributes": {"Take-out": true, "Wi-Fi": "free", "Good For": {"dessert": false, "latenight": false, "lunch": false, "dinner": false, "breakfast": false, "brunch": false}, "Good For Dancing": false, "Noise Level": "loud", "Takes Reservations": false, "Delivery": false, "Ambience": {"romantic": false, "intimate": false, "classy": false, "hipster": false, "divey": false, "touristy": false, "trendy": false, "upscale": false, "casual": false}, "Happy Hour": true, "Parking": {"garage": false, "street": false, "validated": false, "lot": false, "valet": false}, "Has TV": true, "Outdoor Seating": false, "Attire": "casual", "Alcohol": "full_bar", "Waiter Service": true, "Accepts Credit Cards": true, "Good for Kids": false, "Good For Groups": true, "Caters": true, "Price Range": 1}, "type": "business"}
Earring answered 6/4, 2016 at 14:48 Comment(4)
Not every JSON can be converted into a data.frame, since they are way more general. JSONs map very well to R lists; that's why fromJSON returns a list. If you can convert to a data.frame, it really depends on the structure of your object. Share an example of your JSON and state what would look like your desired output.Scurlock
Can you paste some of the data contained in your JSON?Nevers
Thank you for answering @Scurlock and @enlego. I have updated some of my data here. It is a little bit complicated. Would you suggest me analyse it with list directly? Or try to convert it to data frame?(But at least I know where the problem is :) thanks)Earring
that data looks like two sources blended together. However, if you want to try to figure out how to unpack it manually, I would suggest using something like a json to table viewer. (you can save the json to a .txt file then copy & paste. Try this: jsontableviewer.com/# Then you can figure out how to use [[1]]$... and so on to unpack one nested list at a timePolymerism
R
32

Try using jsonlite library. It work for me

fromJSON(temp) %>% as.data.frame

Following is output enter image description here

if you want list.

fromJSON(temp) 
Resinoid answered 18/4, 2016 at 14:37 Comment(3)
From what package do you use " %>%"? I have tried with dplyr and it doesn't work for me. Does it work for any json? Thank youDigitize
I use it from dplyr, check this out #27126172, or you can just do as.data.frame(fromJSON(temp))Resinoid
%>% is from library(magrittr)Pillsbury
B
7

Load the jsonlite package

library(jsonlite)

wine_json is a JSON

wine_json <- '{"name":"Chateau Migraine", "year":1997, "alcohol_pct":12.4, "color":"red", "awarded":false}'

Convert wine_json into a list:

wine <- fromJSON(wine_json)

Print structure of wine

str(wine)
Beerbohm answered 15/7, 2019 at 6:25 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.