我想知道如何在js文件中設置今天的日期,就像我們在js中使用的一樣。在json文件中定義日期
是否有任何選項可以在json文件中指定Date.today()?
因爲,每當我們讀取json文件時,json數據都有指定系統日期的日期對象。
希望,你會明白我想說什麼。
在此先感謝,
-Raja。
我想知道如何在js文件中設置今天的日期,就像我們在js中使用的一樣。在json文件中定義日期
是否有任何選項可以在json文件中指定Date.today()?
因爲,每當我們讀取json文件時,json數據都有指定系統日期的日期對象。
希望,你會明白我想說什麼。
在此先感謝,
-Raja。
JSON是一種結構化的傳輸格式。它沒有邏輯。
但這裏有選項:
爲什麼不只是得到的日期,當你閱讀文件,而不是?
讓服務器生成包含生成日期的JSON。但是,如果您想要當前日期,這並不理想。在讀取文件時,服務器生成的日期已經過去了。
構建解析器,解析字符串並使其搜索自定義標記。
For example,特殊標記包含在@{}
中。在裏面獲取命令,確定命令並執行替換。
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數據中的日期對象。閱讀日期並不是一件好事。我需要在json中完成它。有沒有其他方法? – 2012-04-25 07:27:00
@RajaGopal有一個服務器生成json文件,以便它可以附加當前生成的日期。 AFAIK,JSON不包含邏輯。它只是一種傳輸格式。 – Joseph 2012-04-25 07:28:36
你能解釋一下如何做第三點? – 2012-04-25 07:28:48
不會吧只要你閱讀文件就可以更容易地計算出當前的系統數據?我可能在這裏缺乏上下文,但我沒有看到將它存儲在文檔中的意義。
如果你真的需要的話,你可以做如下
var jsonObject = {"now":"new Date()"};
var date = eval(jsonObject.now);
當json數據具有層次結構時,這不起作用。我需要在json上完成它。有沒有其他方法? – 2012-04-25 07:32:42
@RajaGopal你應該澄清你的意思是「層次問題」。在你的json對象的不同深度是否會出現多個「日期」條目? – Julian 2012-04-27 11:34:40
我的JSON數據應該是這樣的,[{「data1」:「foo」,「Date」:「」,「childs」:[{「data2」:「stack」,「Date」:「」} {} { }]]]等等 – 2012-04-27 15:24:49
如果你想存儲日期,我寧願存儲與像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)
服務器端可以生成ISO格式的JSON日期,例如「 2012-04-30T02:15:12.356Z」 然後客戶端可以解析,並加載到最新目標
new Date(Date.parse("2012-04-30T02:15:12.356Z"))
你可以考慮利用像moment.js http://momentjs.com/
然後,你可以保存日期,通俗圖書館YYYY-MM-DD在JSON,讓瞬間處理解析:
var dateString = '2012-11-01';
var someday = moment(dateString);
var formattedDate = someday.format('ddd, DD MMM YYYY'); // 'Thu, 01 Nov 2012'
我建議你考慮使用JSON-js(json2.js)語法分析器,因爲它解析所有標準的JSON,也可以讓你添加自定義看齊se處理邏輯,稱爲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...
});
在JSON in JavaScript page上提供了對JSON-js的一般介紹,以及有關JSON的一些簡要介紹信息,該頁面還包含一些使用場景。
這將是很好的收集所有你想要這個集合轉移到
Collection<String> dates = new ArrayList<String>();
轉換成JSON對象,然後在receving結束,其轉換回日期的日期。您可以使用joda日期時間API進行轉換。
我用GSON在Java創建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,所以這一直爲我工作。
哪裏JSON文件來自和你有什麼打算用它的內容呢?它是否僅包含要在JavaScript代碼中使用的值,還是要從數據中生成輸出(如HTML)? – Julian 2012-04-27 11:37:33
我需要得到的日期,並必須執行一些計算在HTML端 – 2012-04-27 15:27:04
我真的不知道你的問題。我確實閱讀了你所做的評論,但是請你詳細說明一下你的問題是什麼?也許是一個例子,爲什麼你需要這個。 - 謝謝 – Neysor 2012-04-30 18:05:51