Как разобрать JSON для получения объекта Date в JavaScript? - PullRequest
101 голосов
/ 22 декабря 2010

У меня есть следующий фрагмент JSON:

\/Date(1293034567877)\/

, который является результатом этого кода .NET:

var obj = DateTime.Now;
var serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
serializer.Serialize(obj).Dump();

Теперь проблема, с которой я сталкиваюсь, заключается в том, как создатьДата объекта из этого в JavaScript.Все, что я мог найти, это невероятное решение для регулярных выражений (многие из которых содержат ошибки).

Трудно поверить, что не существует элегантного решения, поскольку все это в JavaScrip, я имею в виду код JavaScript, пытающийся прочитать JSON (JavaScript Object Notation)который должен быть кодом JavaScript, и в этот момент оказывается, что это не потому, что JavaScript не может хорошо здесь работать.

Я также видел некоторые eval-решения, которые я не мог заставить работать (кроме того, чтокак угроза безопасности).

Неужели нет способа сделать это элегантно?

Подобный вопрос без реального ответа:
Как разобрать ASP.NET JSON Формат даты с GWT

Ответы [ 17 ]

0 голосов
/ 19 октября 2016

при использовании функции eval просто необходимо убрать косую черту спереди и сзади.

var date1 = "/Date(25200000)/"
eval("new " + date1.substring(1, date1.length - 1));

урожайность Чт 01 января 1970 00:00:00 GMT-0700 (стандартное время США в горах)

0 голосов
/ 22 декабря 2010

Я не использовал .Net для таких вещей.Если вам удалось напечатать что-то вроде следующего, это должно сработать.

Обратите внимание, если вы не анализируете эту JSON строку каким-либо другим способом или ожидаете, что пользователи будут иметьВ современных браузерах со встроенным анализатором JSON вам необходимо использовать инфраструктуру JS или JSON2 для анализа строки JSON, выводимой сервером, в реальный объект JSON.

// JSON received from server is in string format
var jsonString = '{"date":1251877601000}';

//use JSON2 or some JS library to parse the string
var jsonObject =  JSON.parse( jsonString );

//now you have your date!
alert( new Date(jsonObject.date) );

Wiki Link

Современные браузеры, такие как Firefox 3.5 и Internet Explorer 8, включают специальные функции для анализа JSON.Поскольку собственная поддержка браузера более эффективна и безопасна, чем eval (), ожидается, что собственная поддержка JSON будет включена в следующий стандарт ECMAScript. [6]


Ссылка наФайл JSON2

Живой пример

0 голосов
/ 24 ноября 2015

Как упомянул Callum, для меня лучший способ - изменить метод Controller на string вместо JsonResult.*

0 голосов
/ 16 октября 2015
function parseJsonDate(jsonDate) {

    var fullDate = new Date(parseInt(jsonDate.substr(6)));
    var twoDigitMonth = (fullDate.getMonth() + 1) + ""; if (twoDigitMonth.length == 1) twoDigitMonth = "0" + twoDigitMonth;

    var twoDigitDate = fullDate.getDate() + ""; if (twoDigitDate.length == 1) twoDigitDate = "0" + twoDigitDate;
    var currentDate = twoDigitMonth + "/" + twoDigitDate + "/" + fullDate.getFullYear();

    return currentDate;
};

// Использовать эту функцию

var objDate=parseJsonDate("\/Date(1443812400000)\/");
alert(objDate);
0 голосов
/ 06 июля 2015
function parseJsonDate(jsonDate) {

    var fullDate = new Date(parseInt(jsonDate.substr(6)));
    var twoDigitMonth = (fullDate.getMonth() + 1) + ""; if (twoDigitMonth.length == 1) twoDigitMonth = "0" + twoDigitMonth;

    var twoDigitDate = fullDate.getDate() + ""; if (twoDigitDate.length == 1) twoDigitDate = "0" + twoDigitDate;
    var currentDate = twoDigitMonth + "/" + twoDigitDate + "/" + fullDate.getFullYear();

    return currentDate;
};
0 голосов
/ 18 июля 2012
//
// formats a .net date into a javascript compatible date
//
function FormatJsonDate(jsonDt) 
{              
    var MIN_DATE = -62135578800000; // const

    var date = new Date(parseInt(jsonDt.substr(6, jsonDt.length-8)));                                                       
    return date.toString() == new Date(MIN_DATE).toString() ? "" : (date.getMonth() + 1) + "\\" + date.getDate() + "\\" + date.getFullYear(); 
}
0 голосов
/ 02 марта 2014

Ответ на этот вопрос: используйте nuget для получения JSON.NET, а затем используйте его в вашем JsonResult методе:

JsonConvert.SerializeObject(/* JSON OBJECT TO SEND TO VIEW */);

в вашем представлении просто сделайте это в javascript:

JSON.parse(/* Converted JSON object */)

Если это ajax-вызов:

var request = $.ajax({ url: "@Url.Action("SomeAjaxAction", "SomeController")", dataType: "json"});
request.done(function (data, result) { var safe = JSON.parse(data); var date = new Date(safe.date); });

После вызова JSON.parse вы можете поместить дату JSON в экземпляр new Date, поскольку JsonConvert создает правильный ISOмомент времени

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...