使用字符串上的日期对象将字符串转换为json

时间:2015-11-06 18:33:30

标签: javascript json

我正在尝试将字符串转换为json对象,但每次尝试我都会收到错误。下面是我的字符串格式。我所做的就是将下面的字符串格式传递给JSON.parse函数,但它没有用。如果我通过真正的字符串,如" 1/1/2014"而不是日期对象,它完美地工作。我该怎么做才能安全地进行这种json转换。

breaks <- c(-1e9, 0.3, 0.7, 1)
df1 %>%
    mutate(grp = cut(pc_x, breaks=breaks, labels=FALSE)) %>%
    group_by(grp)
## Source: local data frame [100 x 4]
## Groups: grp [3]
##      idx          x       pc_x   grp
##    (int)      (dbl)      (dbl) (int)
## 1     59 -2.9930901 0.00000000     1
## 2     18 -2.6564554 0.01010101     1
## 3     19 -2.4404669 0.02020202     1
## 4     39 -2.4142076 0.03030303     1
## 5     22 -1.7813084 0.04040404     1
## ..   ...        ...        ...   ...

3 个答案:

答案 0 :(得分:1)

这不是JSON,所以,JSON.parse无法帮助你......

顺便说一下:

  1. 第一个对象的ID未被转义,
  2. 新日期(bla bla bla)不是JSON,至少你应该传递"new Date(2011, 0, 3, 0, 0, 0, 0)"
  3. 之类的东西

    获取日期的最佳方法是将其编码为字符串...

    (new Date()).toString();
    

    如果您爱上了您的代码,请尝试将日期对象包装为字符串,然后执行eval ...

    var a = eval("new Date()")
    

答案 1 :(得分:1)

因为我不认为除eval()之外还有其他办法。主要的问题是,sourcestring不是有效的JSON,而是类似于字面的结构,它已经通过某种类型的转义作为字符串。

首先删除转义符,s是来自OP的字符串:

s = s.replace("\\", "");

使用eval()将其转换(返回?)到文字:

var literal = eval(s);

现在,创建的文字中的Date对象实际上有效:

console.log(literal[0].ApplyDate.getFullYear());

输出2011

演示 - &gt;的 http://jsfiddle.net/hv7ar3qr/

现在,您可以使用

literal恢复为有效的JSON字符串
var json = JSON.stringify(literal);

json将如下所示:

[
    {
        "ID": 0,
        "ApplyDate": "2011-01-02T23:00:00.000Z",
        "Phy": 37.74,
        "Eng": 40,
        "Chem": 37.62,
        "math": 39.17
    },
    {
        "ID": 1,
        "ApplyDate": "2010-11-30T23:00:00.000Z",
        "Phy": 37.15,
        "Eng": 37.99,
        "Chem": 36.51,
        "math": 37.51
    }
]

JSON.parse(json)可用于将json转换为可迭代的JSON对象。还有很长的路要走,第一步需要eval()

答案 2 :(得分:0)

您应首先将Date转换为String,然后对json

进行编码
new Date().toString(); //"Fri Nov 06 2015 19:37:51 GMT+0100"

您可以使用

更改Date的格式
var date = new Date();
date.format() //the format

Here获取yyyymmdd格式的方法

所以如果你有对象

var object = { date: theDate };
object.date = object.date.toString();
var json = JSON.stringify(object.date);