在 JSON 文件中定义日期
defining date in json file
我想知道如何在json文件中设置今天的日期,就像我们在js中使用的一样。
是否有任何选项可以在 json 文件中指定 Date.today()?
因为,json 数据具有日期对象,每当我们读取 json 文件时,它都会指定系统日期。
希望你能理解我想说的话。
提前感谢,
-拉贾。
服务器端可以生成 ISO 格式的 JSON 日期,例如"2012-04-30T02:15:12.356Z"然后客户端可以解析并加载到日期对象中
new Date(Date.parse("2012-04-30T02:15:12.356Z"))
JSON 是一种结构化传输格式。它没有逻辑。
但这里有一些选择:
-
为什么不在读取文件时获取日期?
-
让服务器生成包含生成日期的 JSON。但是,如果您想要当前日期,这并不理想。读取文件时,服务器生成的日期已经过去了。
-
生成一个分析器,用于分析字符串并使其搜索自定义标记。
例如,特殊标记包含在 @{}
中。获取内部命令,确定命令,然后执行替换。
var jsonString = '{"data1" : "foo","date" : "@{currentdate}"}'
在这种情况下,我会找到@{currentdate}
.我应该创建一个与此命令对应的函数,以在读取过程中将@{currentdate}
替换为当前日期(以您想要的格式)
var parsedString = jsonString.replace(/@'{('w+)'}/g, function(match, group) {
if (group === 'currentdate') {
return new Date();
}
else if (group === 'anotherCommand') {
return 'anotherValue';
} //and so on
});
结果是这样的:
jsonString = '{"data1" : "foo","date" : "Fri May 04 2012 01:17:07 GMT-0700 (PDT)"}'
我建议你考虑使用 JSON-js (json2.js) 解析器,因为它解析所有标准 JSON,但也允许你添加自定义解析处理逻辑,称为 reviver
函数,非常适合你的场景。使用自定义处理程序调用 JSON 解析器的基本语法如下所示:
var myObject = JSON.parse(myJSONtext, reviverFunction);
使用您的示例输入作为指南,可以将其设置为如下所示:
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...
});
JavaScript 中的 JSON 页面提供了 JSON-js 的一般介绍,以及有关 JSON 的一些简要介绍信息,该页面还包括一些使用场景。
您可以考虑利用流行的库,例如 moment.js http://momentjs.com/
然后,您可以将日期存储为 json 中的 YYYY-MM-DD,并让 moment 处理解析:
var dateString = '2012-11-01';
var someday = moment(dateString);
var formattedDate = someday.format('ddd, DD MMM YYYY'); // 'Thu, 01 Nov 2012'
如果你想存储日期,我更愿意存储为一个字符串,格式像yyyy/mm/dd hh:mm:ss或类似的东西,并在我想用我需要的语言阅读它时在Date对象中解析它。
obj = {
dates : ['2012/04/30 10:14:23', '2012/05/01 05:34:01']
}
我不明白你想要什么,使用 eval 方法(这是一种丑陋的做法),您可以添加一个方法将实际日期放在对象中,也可以在子项中添加自己并调用添加到子项中的方法。
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"
}]
}
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();
您无法使用函数串化 JSON 对象,因此,在添加方法 addDate 后的第二种方法中,我们将其从 JSON 对象中删除(您也可以删除 this.addDate,但我不知道它是否适用于 IE)
每当读取文件时,计算当前系统数据不是更容易吗?我可能在这里缺乏上下文,但我看不出将其存储在文档中的意义。
如果您确实需要这样做,您可以执行以下操作
var jsonObject = {"now":"new Date()"};
var date = eval(jsonObject.now);
收集要转移到
Collection<String> dates = new ArrayList<String>();
将此集合转换为 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 时,在消费方面没有什么可做的。第一个输出是:
{
"root": {
"level_1_A": {
"d1": new Date(),
"d2": new Date(2015, 0, 1, 9, 30)
},
"level_1_B": {
"d3": new Date(2015, 0, 1, 12, 30)
}
}
}
我对 json 的使用通常是将其保存为 javascript 并带有赋值,所以这对我有用。
- AngularJS自定义日期选择器指令
- DataTables自定义日期格式排序
- 谷歌脚本的自定义日期格式
- 在javascript中自定义日期和时间
- 从字符串解析自定义日期
- 自定义日期格式的正则表达式
- 在 JSON 文件中定义日期
- 设置自定义日期选取器的样式
- 禁用jquery日期选择器中的自定义日期
- 带有自定义日期凹窝.js的数据
- jQuery验证插件:验证自定义日期格式
- 自定义日期验证
- 在jquery中设置自定义日期
- 用于表单的可自定义日期选择器脚本
- 如何在asp.net/c#中从两个开始和结束自定义日期获取周数
- Firefox使用new Date(). gettime()定义日期错误
- 自定义日期选择器宽度
- Jquery自定义日期验证器只工作一次
- 在Angular.js中自定义日期过滤器来改变日期格式
- 将自定义日期字符串转换为日期对象