Javascript 在json文件中定义日期

Javascript 在json文件中定义日期,javascript,json,date,Javascript,Json,Date,我想知道如何在json文件中设置今天的日期,就像我们在js中使用的一样 有没有在json文件中指定Date.today()的选项 因为,json数据具有date对象,每当我们读取json文件时,它都会指定系统日期 希望你能理解我想说的话 提前感谢, -Raja.JSON是一种结构化传输格式。它没有逻辑性 但有以下几种选择: 为什么不在读取文件时只获取日期呢 让服务器生成包含生成日期的JSON。但是,如果您想要当前日期,这并不理想。当您读取文件时,服务器生成的日期已经过去 构建一个解析字符串并使其

我想知道如何在json文件中设置今天的日期,就像我们在js中使用的一样

有没有在json文件中指定Date.today()的选项

因为,json数据具有date对象,每当我们读取json文件时,它都会指定系统日期

希望你能理解我想说的话

提前感谢,


-Raja.

JSON是一种结构化传输格式。它没有逻辑性

但有以下几种选择:

  • 为什么不在读取文件时只获取日期呢

  • 让服务器生成包含生成日期的JSON。但是,如果您想要当前日期,这并不理想。当您读取文件时,服务器生成的日期已经过去

  • 构建一个解析字符串并使其搜索自定义标记的解析器

  • ,特殊标记包含在
    @{}
    中。获取内部命令,确定命令并执行替换

    var jsonString = '{"data1" : "foo","date" : "@{currentdate}"}'
    
    在本例中,我将找到
    @{currentdate}
    。我应该创建一个与此命令对应的函数,在读取期间将
    @{currentdate}
    替换为当前日期(以您想要的格式)

    结果是这样的:

    jsonString = '{"data1" : "foo","date" : "Fri May 04 2012 01:17:07 GMT-0700 (PDT)"}'
    
    var jsonTxt = '[{' +
            '"data1": "foo",' +
            '"Date":  "",' +
            '"childs": [{' +
                '"data2": "stack",' +
                '"Date": ""' +
            '}{}{}...]}]';    //and-on-and-on as in your comment
    
    myData = JSON.parse(jsonTxt, function ( key, value ) {
        if ( key === 'Date') { return new Date(); }
        //any additonal custom logic you may need later...
    });
    

    当您读取文件时,仅仅计算当前系统数据不是更容易吗?我可能在这里缺乏上下文,但我不认为在文档中存储上下文有什么意义

    如果你真的需要这样做,你可以做如下

    var jsonObject = {"now":"new Date()"};
    var date = eval(jsonObject.now);
    

    如果您想存储日期,我更希望以yyyy/mm/dd hh:mm:ss或类似格式的字符串形式存储,并在我想以所需语言读取日期时在日期对象中解析它

    obj = {
        dates : ['2012/04/30 10:14:23', '2012/05/01 05:34:01']
    }
    
    我不太明白你到底想要什么,使用eval方法(这是一种丑陋的做法),你可以添加一个方法来将实际日期放入object中,还可以在children中添加他自己,并调用children中添加的方法

    obj = {
        data : "foo",
        addDate : function() {
            this.date = newDate();
            if (this.children) {
                for (var i = 0; i < this.children.length; i++) {
                    this.children[i].addDate = this.addDate;
                    this.children[i].addDate();
                }
            }
        },
        children : [{
            data : "foo2"
        }]
    }
    
    obj={
    数据:“foo”,
    addDate:函数(){
    this.date=newDate();
    如果(这是儿童){
    for(var i=0;i
    PS如果要将其存储在文件中,则必须使用eval方法(不推荐)将方法存储为字符串或每次加载文件时都使用

    jsonLoaded; // this var has the json that you store in a file;
    var addDate = function() {
        this.date = newDate();
        if (this.children) {
            for (var i = 0; i < this.children.length; i++) {
                this.children[i].addDate = this.addDate;
                this.children[i].addDate();
            }
        }
        this.addDate = null; // remove the function we have added
        // delete this.addDate; // if is compatible with browser
    }
    jsonLoaded.addDate = addDate;
    jsonLoaded.addDate();
    
    jsonload;//这个变量包含存储在文件中的json;
    var addDate=函数(){
    this.date=newDate();
    如果(这是儿童){
    for(var i=0;i

    您无法使用函数字符串化json对象,因此,在添加addDate方法后的第二个方法中,我们将其从json对象中删除(您也可以删除this.addDate,但我不知道它是否在IE中工作)

    服务器端可以生成ISO格式的json日期,例如“2012-04-30T02:15:12.356Z” 然后客户端可以解析并加载到date对象中

    new Date(Date.parse("2012-04-30T02:15:12.356Z"))
    

    <>你可以考虑利用流行的图书馆,如Jim.j/P> 然后,您可以在json中将日期存储为YYYY-MM-DD,并让矩处理解析:

    var dateString = '2012-11-01';
    var someday = moment(dateString);
    var formattedDate = someday.format('ddd, DD MMM YYYY'); // 'Thu, 01 Nov 2012'
    

    我建议您考虑使用()解析器,因为它解析所有标准JSON,但也允许您添加自定义解析处理逻辑,称为<代码> Realver < /Cuff>函数,这非常适合您的场景。使用自定义处理程序调用JSON解析器的基本语法如下所示:

    jsonString = '{"data1" : "foo","date" : "Fri May 04 2012 01:17:07 GMT-0700 (PDT)"}'
    
    var jsonTxt = '[{' +
            '"data1": "foo",' +
            '"Date":  "",' +
            '"childs": [{' +
                '"data2": "stack",' +
                '"Date": ""' +
            '}{}{}...]}]';    //and-on-and-on as in your comment
    
    myData = JSON.parse(jsonTxt, function ( key, value ) {
        if ( key === 'Date') { return new Date(); }
        //any additonal custom logic you may need later...
    });
    
    var myObject=JSON.parse(myJSONtext,reviveerfunction)

    使用示例输入作为指导,可以将其设置为如下方式:

    jsonString = '{"data1" : "foo","date" : "Fri May 04 2012 01:17:07 GMT-0700 (PDT)"}'
    
    var jsonTxt = '[{' +
            '"data1": "foo",' +
            '"Date":  "",' +
            '"childs": [{' +
                '"data2": "stack",' +
                '"Date": ""' +
            '}{}{}...]}]';    //and-on-and-on as in your comment
    
    myData = JSON.parse(jsonTxt, function ( key, value ) {
        if ( key === 'Date') { return new Date(); }
        //any additonal custom logic you may need later...
    });
    

    网站上提供了对JSON的一般介绍,以及一些关于JSON的简要介绍信息,该页面还包括一些使用场景。

    收集所有要传输到

    Collection<String> dates = new ArrayList<String>();
    
    Collection dates=new ArrayList();
    

    将此集合转换为json对象,然后在接收端将其转换回最新状态。您可以使用joda日期时间API进行转换。

    我使用java中的Gson创建json输出,但Gson不允许我将javascript函数放入json中。这就是我要做的:使用替换标记来放置代码(就像前面的答案之一)。然后获取json的文本,替换标记,然后将文本保存到json文件中:

        Map<String, String> dynamicDates = new HashMap<>();
        dynamicDates.put("d1", "new Date()");
        dynamicDates.put("d2", "new Date(2015, 0, 1, 9, 30)");
        dynamicDates.put("d3", "new Date(2015, 0, 1, 12, 30)");
    
        JsonObject json = new JsonObject();
        JsonObject root = new JsonObject();
        JsonObject level_1_A = new JsonObject();
        JsonObject level_1_B = new JsonObject();
        json.add("root", root);
        root.add("level_1_A", level_1_A);
        root.add("level_1_B", level_1_B);
    
        level_1_A.addProperty("d1", "${d1}");
        level_1_A.addProperty("d2", "${d2}");
        level_1_B.addProperty("d3", "${d3}");
    
        StringBuilder sb = new StringBuilder();
        new GsonBuilder().setPrettyPrinting().create().toJson(json, sb);
    
        String str = sb.toString();
        for (String key : dynamicDates.keySet()) {
            str = str.replace("\"${" + key + "}\"", dynamicDates.get(key));
        }
        String jsonText = str;
        String javascriptText = "var myJson = " + str + ";";
    
        System.out.println(jsonText);
        System.out.println(javascriptText);
    

    我对json的使用通常是将其保存为带有赋值的javascript,因此这对我来说一直很有效。

    不仅仅是一个日期。我在json数据中有很多日期对象。边读边约会不是个好主意。我需要用json本身来完成它。还有其他方法吗?@RajaGopal让服务器生成json文件,以便它可以附加当前生成的日期。恕我直言,JSON不包含逻辑。这只是一种传输格式。@RajaGopal然后使用递归函数来完成。谢谢,但是,当我们从json文件读取时,我们将得到一个json对象。如何将@{xxx}值替换为原始值?是否可以获取json字符串并替换?@RajaGopal我想您也可以直接替换json字符串。但是如果你把它作为一个对象,你必须做递归来找到那些特殊的标记,并在读取时用当前日期替换它们。我需要在json本身上完成它。还有别的办法吗?@RajaGopal你应该澄清你所说的“等级问题”是什么意思。在json对象的不同深度是否会出现多个“date”条目?我的json数据应该是这样的,[{“data1”:“foo”,“date”:“childs”:[{“data2”:“stac”: