2012-04-25 40 views
7

我想知道如何在js文件中設置今天的日期,就像我們在js中使用的一樣。在json文件中定義日期

是否有任何選項可以在json文件中指定Date.today()?

因爲,每當我們讀取json文件時,json數據都有指定系統日期的日期對象。

希望,你會明白我想說什麼。

在此先感謝,

-Raja。

+0

哪裏JSON文件來自和你有什麼打算用它的內容呢?它是否僅包含要在JavaScript代碼中使用的值,還是要從數據中生成輸出(如HTML)? – Julian 2012-04-27 11:37:33

+0

我需要得到的日期,並必須執行一些計算在HTML端 – 2012-04-27 15:27:04

+0

我真的不知道你的問題。我確實閱讀了你所做的評論,但是請你詳細說明一下你的問題是什麼?也許是一個例子,爲什麼你需要這個。 - 謝謝 – Neysor 2012-04-30 18:05:51

回答

8

JSON是一種結構化的傳輸格式。它沒有邏輯。

但這裏有選項:

  1. 爲什麼不只是得到的日期,當你閱讀文件,而不是?

  2. 讓服務器生成包含生成日期的JSON。但是,如果您想要當前日期,這並不理想。在讀取文件時,服務器生成的日期已經過去了。

  3. 構建解析器,解析字符串並使其搜索自定義標記。

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)"}' 
+0

不只一個日期。我有很多json數據中的日期對象。閱讀日期並不是一件好事。我需要在json中完成它。有沒有其他方法? – 2012-04-25 07:27:00

+1

@RajaGopal有一個服務器生成json文件,以便它可以附加當前生成的日期。 AFAIK,JSON不包含邏輯。它只是一種傳輸格式。 – Joseph 2012-04-25 07:28:36

+0

你能解釋一下如何做第三點? – 2012-04-25 07:28:48

1

不會吧只要你閱讀文件就可以更容易地計算出當前的系統數據?我可能在這裏缺乏上下文,但我沒有看到將它存儲在文檔中的意義。

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

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

當json數據具有層次結構時,這不起作用。我需要在json上完成它。有沒有其他方法? – 2012-04-25 07:32:42

+0

@RajaGopal你應該澄清你的意思是「層次問題」。在你的json對象的不同深度是否會出現多個「日期」條目? – Julian 2012-04-27 11:34:40

+0

我的JSON數據應該是這樣的,[{「data1」:「foo」,「Date」:「」,「childs」:[{「data2」:「stack」,「Date」:「」} {} { }]]]等等 – 2012-04-27 15:24:49

1

如果你想存儲日期,我寧願存儲與像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)

10

服務器端可以生成ISO格式的JSON日期,例如「 2012-04-30T02:15:12.356Z」 然後客戶端可以解析,並加載到最新目標

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

你可以考慮利用像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' 
4

我建議你考慮使用JSON-jsjson2.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的一些簡要介紹信息,該頁面還包含一些使用場景。

0

這將是很好的收集所有你想要這個集合轉移到

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

轉換成JSON對象,然後在receving結束,其轉換回日期的日期。您可以使用joda日期時間API進行轉換。

0

我用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,所以這一直爲我工作。