2012-04-25 29 views
7

jsonで使用しているようにjsonファイルで今日の日付を設定する方法を知りたいのですが。jsonファイルの日付を定義する

jsonファイルでDate.today()を指定するオプションはありますか?

jsonデータには、jsonファイルを読み込むたびにシステムの日付を指定するdateオブジェクトがあるためです。

希望、あなたは私が何を言おうとしているのか理解しています。事前に

おかげで、

-Raja。

+0

jsonファイルはどこから来たのですか、その内容はどうしますか? JavaScriptコード内で使用する値が含まれているだけでなく、データから出力(HTMLなど)を生成する予定ですか? – Julian

+0

私は日付を取得する必要があり、HTML側でいくつかの計算を実行する必要があります –

+0

私は本当にあなたの問題を取得しないでください。私はあなたが作ったコメントを読んだが、もう少しあなたの問題が何かを指定してもらえますか?おそらくあなたが必要とする例であろう。 - ありがとう – Neysor

答えて

8

JSONは構造化トランスポートフォーマットです。それには論理がありません。

しかし、ここではオプションです:

  1. なぜあなたの代わりにファイルを読み込むときに、ちょうど日付を取得しますか?

  2. サーバに、生成日時を含むJSONを生成させますか?ただし、現在の日付を使用する場合は理想的ではありません。ファイルを読むまでに、サーバーによって生成された日付はすでに過去です。

  3. 文字列を解析してカスタムマークアップを検索するパーサーを作成します。

For example、特別なマークアップは@{}に含まれています。コマンドを内部で取得し、コマンドを決定し、置換を実行します。この場合

var jsonString = '{"data1" : "foo","date" : "@{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 
}); 

(あなたが望む形式で)リード時現在の日付に@{currentdate}を置き換えるために、このコマンドに対応する関数を作成する必要があり、その結果は、このようなものです:

jsonString = '{"data1" : "foo","date" : "Fri May 04 2012 01:17:07 GMT-0700 (PDT)"}' 
+0

日付は1つだけではありません。私はjsonデータに多くの日付オブジェクトを持っています。読んでいる間に日付を取得することは良いものではありません。私はjson自体でそれを行う必要があります。他の方法はありますか? –

+1

@RajaGopalは、現在の生成日付を追加できるように、サーバーにjsonファイルを生成させます。 AFAIK、JSONにはロジックが含まれていません。それは単なるトランスポートフォーマットです。 – Joseph

+0

3点目の説明方法を教えてください。 –

1

それはないだろうファイルを読むたびに現在のシステムデータを計算するだけで簡単にできますか?私はここで文脈が不足しているかもしれませんが、私はそれを文書に保存する際のポイントを見ません。

あなたが本当に行う必要がある場合は、日付を格納する場合、私はYYYY/MM/DD HHのような形式の文字列として格納することを好むだろう

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

jsonデータに階層がある場合、これは機能しません。私はjson自体でそれを行う必要があります。他の方法はありますか? –

+0

@RajaGopal "階層問題"の意味を明確にする必要があります。 jsonオブジェクト内のさまざまな深度で複数の "date"エントリが発生することはありますか? – Julian

+0

私のjsonデータは、[{"" data1 ":" foo "、" Date ":" "、" childs ":[{" data2 ":" stack "、" Date ":"}} {} { } ..]}]などなど –

1

を次のようにあなたが行うことができます。 mm:ssかそれに類するもので、必要な言語で読みたいときはDateオブジェクトで解析します。私はevalの方法(それは醜い勧めします)で、正確に何をしたい理解していない

obj = { 
    dates : ['2012/04/30 10:14:23', '2012/05/01 05:34:01'] 
} 

、あなたがオブジェクトで実際の日付を入れて、また子供たちに自分自身を追加し、呼び出すメソッドを追加することができますメソッドを追加しました。あなたはそれをファイルに保存したい場合は

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を追加した後の2番目のメソッドで、jsonオブジェクトから削除します(this.addDateも削除できますが、 IE)

10

サーバー側では、JSONの日付をISO形式(たとえば、 2012-04-30T02:15:12.356Z」 次に、クライアント側は、日付オブジェクトに

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

を解析して読み込むことができます。その後、あなたのように日付を保存することができmoment.js http://momentjs.com/

のような人気のあるライブラリを活用し検討することができます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' 
4

それはすべての標準JSONを解析するだけでなく、カスタムパーを追加することができますので、私は、あなたがJSON-jsjson2.js)パーサを使用することを検討することを示唆していますあなたのシナリオに合った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-jsの一般的な紹介はJSON in JavaScript pageで提供されており、JSONについての簡単な紹介情報があり、ページにはいくつかの使用シナリオも含まれています。

0

あなたがこのコレクションは、JSONオブジェクトに変換し、その後receving最後に、それが戻って日付に変換

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

に転送したいすべての日付を収集するために良いだろう。コンバージョンにjoda date time APIを使用できます。

0

私はjson出力を作成するためにjavaでGsonを使用しますが、Gsonはjsonにjavascript関数を入れることを許可しません。だから、これは私がやることです:コードを入れたい場所(以前の回答の1つ)のような場所に置換タグを使用してください。その後、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); 

はありません。そして、第1の出力は、次のとおりです。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) 
     } 
     } 
    } 

私の使用は通常の割り当てではJavaScriptとして保存されるので、これは私のために働いてきました。

関連する問題