Javascript 将字符串转换为字符串上带有日期对象的json

Javascript 将字符串转换为字符串上带有日期对象的json,javascript,json,Javascript,Json,我试图将字符串转换为json对象,但每次尝试都会出现错误。下面是我的字符串格式。我所做的只是将下面的字符串格式传递给JSON.parse函数,但它不起作用。如果我传递真正的字符串,比如“1/1/2014”,而不是日期对象,那么它工作得非常好。我应该怎么做才能安全地进行json转换 "[{ \"ID\": 0, \"ApplyDate\": new Date(2011, 0, 3, 0, 0, 0, 0), \"Phy\":37.74,\"Eng\": 40, \"Chem\": 37.62, \

我试图将字符串转换为json对象,但每次尝试都会出现错误。下面是我的字符串格式。我所做的只是将下面的字符串格式传递给JSON.parse函数,但它不起作用。如果我传递真正的字符串,比如“1/1/2014”,而不是日期对象,那么它工作得非常好。我应该怎么做才能安全地进行json转换

"[{ \"ID\": 0, \"ApplyDate\": new Date(2011, 0, 3, 0, 0, 0, 0),
\"Phy\":37.74,\"Eng\": 40, \"Chem\": 37.62, \"math\": 39.17 },{ \"ID\": 1,
\"ApplyDate\": new Date(2010, 11, 1, 0, 0, 0, 0), \"Phy\": 37.15, \"Eng\":
37.99, \"Chem\": 36.51, \"math\": 37.51 }]";

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

new Date().toString(); //"Fri Nov 06 2015 19:37:51 GMT+0100"
您可以使用更改日期的格式

var date = new Date();
date.format() //the format
获取
yyyyymmdd
格式的方法

所以如果你有目标

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

这不是JSON,因此,JSON.parse无法帮助您

顺便说一下:

  • 第一个对象的ID没有转义
  • 新日期(bla-bla-bla)不是JSON,至少您应该传递类似于“新日期(2011,0,3,0,0,0,0)”的内容
  • 获取日期的最佳方法是将其编码为字符串

    (new Date()).toString();
    
    如果您喜欢您的代码,请尝试将日期对象包装为字符串,然后执行eval

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

    事实上,我认为除了
    eval()
    之外,没有别的办法了。主要的问题是,sourcestring不是有效的JSON,而是一个类似于文本的结构,它已经作为字符串进行了某种形式的转义

    因此,首先删除转义符,
    s
    是OP中的字符串:

    s = s.replace("\\", "");
    
    使用
    eval()将其(返回?)转换为文字:

    现在,创建的文本中的
    Date
    对象实际起作用:

    console.log(literal[0].ApplyDate.getFullYear());
    
    2011年产出

    演示->


    现在,您可以使用

    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()

    他也没有逃避一些引用。我猜这是错误转换的结果。这个字符串流来自服务器端。是否有办法仅在客户端选择该字段并将其转换为日期?如果是这样的话,我该怎么做呢?你可以按照@Hitmands的建议去做,但是使用eval字符串并不安全。您应该避免像这样保存那个日期,它只会导致问题,不是正确的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
        }
    ]