令人讨厌的嵌套JSON到R中的数据框

时间:2016-10-19 05:20:32

标签: json r dataframe

我有几个JSON输入,如下所示。

输入1:

{"booking":{"id":"54092","createdOn":"2016-10-06T06:29:00.0000000+0000","bookingDateTime":"2016-10-08T06:45:00.0000000+0000","checkInDateTime":null,"checkOutDateTime":null,"tableNumbers":null,"pax":3,"type":"calling","status":"booked","source":"concierge","specialInstruction":"test hoppi","outlet":{"id":"46a97c2e-c921-4339-819c-50e17f25d09a","name":"Hoppipolla"},"customer":{"name":"Hoppi","email":"hoppi@xmail.com","countryCallingCode":"91","phone":"8901234567"}},"eventType":"booked","serverDateTime":"2016-10-06T06:28:25.0000558+0000"}

{"booking":{"id":"54093","createdOn":"2016-10-06T06:30:00.0000000+0000","bookingDateTime":"2016-10-08T06:46:00.0000000+0000","checkInDateTime":null,"checkOutDateTime":null,"tableNumbers":null,"pax":3,"type":"calling","status":"booked","source":"concierge","specialInstruction":"test hoppi","outlet":{"id":"46a97c2e-c922-4339-819c-50e17f25d09a","name":"Hoppipolla"},"customer":{"name":"Ravi","email":"ravi@xmail.com","countryCallingCode":"91","phone":"8901234548"}},"eventType":"booked","serverDateTime":"2016-10-06T06:28:25.0000558+0000"}

输入2:

{"feedback":{"dateTime":"2016-10-06T09:24:05.0000730+0000","customerName":"mytestdevcog","averageRating":4,"isNegativeByComments":false,"outlet":{"id":"f9e9c21f-2e52-462e-a1f2-012dab216d27","name":"cholan 's Darbar"},"customer":{"name":"mytestdevcog","email":"mytestdevcog123@gmail.com","countryCallingCode":"91","phone":"7895478745"},"responses":[{"question":"Was your waiting time too long?","response":"No","questionType":"yes_no"},{"question":"Service","response":"3","questionType":"rating"},{"question":"desserts","response":"4","questionType":"rating"},{"question":"Comments","response":"good","questionType":"short_answer"},{"question":"How likely is it that you would recommend us to a friend or colleague?","response":"5","questionType":"nps"},{"question":"Portion Size","response":"5","questionType":"rating"},{"question":"Indian Food","response":"4","questionType":"rating"},{"question":"Desert spread","response":"4","questionType":"rating"}]},"serverDateTime":"2016-10-06T09:24:27.0000644+0000"}

{"feedback":{"dateTime":"2016-10-06T09:24:05.0000730+0000","customerName":"mytestdevcog","averageRating":4,"isNegativeByComments":false,"outlet":{"id":"f9e9c21f-2e52-462e-a1f2-012dab216d27","name":"cholan 's Darbar"},"customer":{"name":"mytestdevcog","email":"mytestdevcog123@gmail.com","countryCallingCode":"91","phone":"7895478745"},"responses":[{"question":"Was your waiting time too long?","response":"No","questionType":"yes_no"},{"question":"Service","response":"3","questionType":"rating"},{"question":"desserts","response":"4","questionType":"rating"},{"question":"Comments","response":"good","questionType":"short_answer"},{"question":"How likely is it that you would recommend us to a friend or colleague?","response":"5","questionType":"nps"},{"question":"Portion Size","response":"5","questionType":"rating"},{"question":"Indian Food","response":"4","questionType":"rating"},{"question":"Desert spread","response":"4","questionType":"rating"}]},"serverDateTime":"2016-10-06T09:24:27.0000644+0000"}

两个输入需要两个单独的数据帧。如何在R?

中实现这一目标

1 个答案:

答案 0 :(得分:0)

正如评论中正确指出的那样,你的json包含一个错误。第三和第四个字符串实际上包含" cholan的darbar",必须先将其转义才能将其解析为json。

为了您的问题(关于获取两个数据集),我直接纠正了字符串。以下是如何做到的:

library(jsonlite)

s1 <- '{"booking":{"id":"54092","createdOn":"2016-10-06T06:29:00.0000000+0000","bookingDateTime":"2016-10-08T06:45:00.0000000+0000","checkInDateTime":null,"checkOutDateTime":null,"tableNumbers":null,"pax":3,"type":"calling","status":"booked","source":"concierge","specialInstruction":"test hoppi","outlet":{"id":"46a97c2e-c921-4339-819c-50e17f25d09a","name":"Hoppipolla"},"customer":{"name":"Hoppi","email":"hoppi@xmail.com","countryCallingCode":"91","phone":"8901234567"}},"eventType":"booked","serverDateTime":"2016-10-06T06:28:25.0000558+0000"}'

s2 <- '{"booking":{"id":"54093","createdOn":"2016-10-06T06:30:00.0000000+0000","bookingDateTime":"2016-10-08T06:46:00.0000000+0000","checkInDateTime":null,"checkOutDateTime":null,"tableNumbers":null,"pax":3,"type":"calling","status":"booked","source":"concierge","specialInstruction":"test hoppi","outlet":{"id":"46a97c2e-c922-4339-819c-50e17f25d09a","name":"Hoppipolla"},"customer":{"name":"Ravi","email":"ravi@xmail.com","countryCallingCode":"91","phone":"8901234548"}},"eventType":"booked","serverDateTime":"2016-10-06T06:28:25.0000558+0000"}'

在以下两个字符串中我手动纠正了#43; cholan的Darbar&#34; to&#34; cholan \&#39> Darbar&#34;

s3 <- '{"feedback":{"dateTime":"2016-10-06T09:24:05.0000730+0000","customerName":"mytestdevcog","averageRating":4,"isNegativeByComments":false,"outlet":{"id":"f9e9c21f-2e52-462e-a1f2-012dab216d27","name":"cholan \'s Darbar"},"customer":{"name":"mytestdevcog","email":"mytestdevcog123@gmail.com","countryCallingCode":"91","phone":"7895478745"},"responses":[{"question":"Was your waiting time too long?","response":"No","questionType":"yes_no"},{"question":"Service","response":"3","questionType":"rating"},{"question":"desserts","response":"4","questionType":"rating"},{"question":"Comments","response":"good","questionType":"short_answer"},{"question":"How likely is it that you would recommend us to a friend or colleague?","response":"5","questionType":"nps"},{"question":"Portion Size","response":"5","questionType":"rating"},{"question":"Indian Food","response":"4","questionType":"rating"},{"question":"Desert spread","response":"4","questionType":"rating"}]},"serverDateTime":"2016-10-06T09:24:27.0000644+0000"}'

s4 <- '{"feedback":{"dateTime":"2016-10-06T09:24:05.0000730+0000","customerName":"mytestdevcog","averageRating":4,"isNegativeByComments":false,"outlet":{"id":"f9e9c21f-2e52-462e-a1f2-012dab216d27","name":"cholan \'s Darbar"},"customer":{"name":"mytestdevcog","email":"mytestdevcog123@gmail.com","countryCallingCode":"91","phone":"7895478745"},"responses":[{"question":"Was your waiting time too long?","response":"No","questionType":"yes_no"},{"question":"Service","response":"3","questionType":"rating"},{"question":"desserts","response":"4","questionType":"rating"},{"question":"Comments","response":"good","questionType":"short_answer"},{"question":"How likely is it that you would recommend us to a friend or colleague?","response":"5","questionType":"nps"},{"question":"Portion Size","response":"5","questionType":"rating"},{"question":"Indian Food","response":"4","questionType":"rating"},{"question":"Desert spread","response":"4","questionType":"rating"}]},"serverDateTime":"2016-10-06T09:24:27.0000644+0000"}'


j1 <- fromJSON(s1)
j2 <- fromJSON(s2)
j3 <- fromJSON(s3)
j4 <- fromJSON(s4)

rbind(j1, j2)

rbind(j3, j4)