2

I want to convert date in to JSON format. The R all.elasticities data.frame looks like this:

 PREVIOUS_START_DATE PREVIOUS_PRICE PREVIOUS_QUANTITY PRE_No_OF_WEEKS CURRENT_START_DATE
         2015-12-20           2.79           20680.5               2         2015-12-20         
         2016-01-17           2.29           21049.5               4         2016-01-17         
         2016-01-31           1.69           24689.5               2         2016-01-31      

I am using,

 x <- toJSON(unname(split(all.elasticities, 1:nrow(all.elasticities))))

I am getting output as,

"[{\"PREVIOUS_START_DATE\":16789,\"PREVIOUS_PRICE\":2.79,\"PREVIOUS_QUANTITY\":20680.5,\"PRE_No_OF_WEEKS\":2,\"CURRENT_START_DATE\":16789},{\"PREVIOUS_START_DATE\":16817,\"PREVIOUS_PRICE\":2.29,\"PREVIOUS_QUANTITY\":21049.5,\"PRE_No_OF_WEEKS\":4,\"CURRENT_START_DATE\":16817},{\"PREVIOUS_START_DATE\":16831,\"PREVIOUS_PRICE\":1.69,\"PREVIOUS_QUANTITY\":24689.5,\"PRE_No_OF_WEEKS\":2,\"CURRENT_START_DATE\":16831}]"

Dates are getting converted into numbers. I want to keep in date format.

csgillespie
  • 59,189
  • 14
  • 150
  • 185
sayali
  • 97
  • 6

2 Answers2

1

library(jsonlite) works with date formats, and there's also no need to split the data.frame either.

 str(all.elasticities)
'data.frame':   3 obs. of  5 variables:
 $ PREVIOUS_START_DATE: Date, format: "2015-12-20" "2016-01-17" "2016-01-31"
 $ PREVIOUS_PRICE     : num  2.79 2.29 1.69
 $ PREVIOUS_QUANTITY  : num  20680 21050 24690
 $ PRE_No_OF_WEEKS    : int  2 4 2
 $ CURRENT_START_DATE : Date, format: "2015-12-20" "2016-01-17" "2016-01-31"


> jsonlite::toJSON(all.elasticities, pretty=T)
[
  {
    "PREVIOUS_START_DATE": "2015-12-20",
    "PREVIOUS_PRICE": 2.79,
    "PREVIOUS_QUANTITY": 20680.5,
    "PRE_No_OF_WEEKS": 2,
    "CURRENT_START_DATE": "2015-12-20"
  },
  {
    "PREVIOUS_START_DATE": "2016-01-17",
    "PREVIOUS_PRICE": 2.29,
    "PREVIOUS_QUANTITY": 21049.5,
    "PRE_No_OF_WEEKS": 4,
    "CURRENT_START_DATE": "2016-01-17"
  },
  {
    "PREVIOUS_START_DATE": "2016-01-31",
    "PREVIOUS_PRICE": 1.69,
    "PREVIOUS_QUANTITY": 24689.5,
    "PRE_No_OF_WEEKS": 2,
    "CURRENT_START_DATE": "2016-01-31"
  }
] 
SymbolixAU
  • 25,502
  • 4
  • 67
  • 139
0

As was mentioned in a comment, you need to convert your date to a character first:

x = as.Date("2016-01-01")
RJSONIO::toJSON(as.character(x))

When you don't convert to a character, the value is changed to a numeric, when represents the number of days since 1970, e.g.

as.numeric(x)
as.numeric(x)/365
csgillespie
  • 59,189
  • 14
  • 150
  • 185