jsで使用しているように、jsonファイルで今日の日付を設定する方法を知りたいです。
json ファイルで Date.today() を指定するオプションはありますか?
json データには、json ファイルを読み取るたびにシステムの日付を指定する date オブジェクトがあるためです。
私が言おうとしていることを理解していただければ幸いです。
前もって感謝します、
-ラジャ。
jsで使用しているように、jsonファイルで今日の日付を設定する方法を知りたいです。
json ファイルで Date.today() を指定するオプションはありますか?
json データには、json ファイルを読み取るたびにシステムの日付を指定する date オブジェクトがあるためです。
私が言おうとしていることを理解していただければ幸いです。
前もって感謝します、
-ラジャ。
サーバー側は、「2012-04-30T02:15:12.356Z」などの ISO 形式で JSON 日付を生成できます。次に、クライアント側で解析して日付オブジェクトにロードできます。
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...
});
JSON-js の一般的な紹介は、JavaScript の JSON ページで提供され、JSON に関するいくつかの簡単な紹介情報とともに、このページにはいくつかの使用シナリオも含まれています。
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'
日付を保存する場合は、yyyy/mm/dd hh:mm:ss などの形式の文字列として保存し、日付オブジェクトで読み取りたいときにそれを解析することをお勧めします。私が必要とする言語。
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 メソッドを追加した後の 2 番目のメソッドで、json オブジェクトからそれを削除します (this.addDate を削除することもできますが、IE で機能するかどうかはわかりません)。 )
ファイルを読み取るたびに現在のシステム データを計算する方が簡単ではないでしょうか。ここではコンテキストが不足している可能性がありますが、それをドキュメントに保存する意味がわかりません。
本当にそうする必要がある場合は、次のようにすることができます
var jsonObject = {"now":"new Date()"};
var date = eval(jsonObject.now);
Java で Gson を使用して json 出力を作成していますが、Gson では JavaScript 関数を json に入れることができません。これが私がすることです:コードを配置したい場所に置換タグを使用します(以前の回答の1つのように)。次に、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として保存するため、これでうまくいきました。
転送したいすべての日付を収集するとよいでしょう。
Collection<String> dates = new ArrayList<String>();
このコレクションを json オブジェクトに変換し、受信側でそれを日付に戻します。変換には joda 日時 API を使用できます。