Как мне проанализировать даты в формате JSON с помощью ActionScript?

#asp.net #apache-flex #json #actionscript

#asp.net #apache-flex #json #actionscript

Вопрос:

У меня есть даты в формате JSON, которые генерируются из ASP.NET страницы, использующие JSON.NET библиотека. Эти даты выглядят следующим образом:

 "LastModifiedDate": "/Date(1301412877000-0400)/"
  

Как мне проанализировать их с помощью ActionScript из Flex 3 Professional? Я хотел бы иметь это в собственном формате данных.

ПРИМЕЧАНИЕ: Чего я здесь не спрашиваю, так это как мне проанализировать поток JSON с помощью as3corelib. Я десериализовал JSON с помощью этой библиотеки, но даты не декодированы. Вот почему мне нужно знать, как декодировать этот формат даты.

Ответ №1:

Вы захотите использовать JSON-реализацию as3corelib для декодирования вашей строки в объекты.

Комментарии:

1. Это не работает. Я должен был указать, что я использую as3corelib для получения JSON. JSON правильно привязан к моей сетке, но дата расшифрована неправильно. я

2. Это потому, что используемая вами дата нестандартна. as3corelib декодирует формат w3c DTF (ISO 8601) . Вам нужно будет самостоятельно декодировать строку в дату, если вы хотите, чтобы она работала, или изменить реализацию этого формата даты на вашем сервере.

3. Не соответствует спецификациям JSON . Было бы лучше просто отправить число, и поскольку вы уже знаете, что это дата, выполните преобразование на стороне клиента с меткой времени с помощью new Date(timestamp) .

4. Хорошо, я нашел james.newtonking.com/archive/2009/02/20 / … тоже. Похоже на ASP.NET разработчик должен обновить используемый конвертер.

Ответ №2:

     /**
     * Converts 'Unix tick' format JSON Date to AS3 Date instances.
     * Example json input: "{"BarDate":"/Date(1334672700000)/" }"
     * Example json input: "{"BarDate":"/Date(1334672700000 0000)/" }"
     *
     * @param json date from JSON 
     * @return Date if conversion possible and worked else null. 
     */
    public static function parseJSONUnixTickDateToDate(json:String):Date
    {
        var date:Date = null;
        if (json)
        {
            json = json.substring(json.indexOf("(")   1, json.indexOf(")"));
            var arr:Array = json.split(" ");
            date = new Date(Number(arr[0]));
        }
        return date;
    }
  

Ответ №3:

В ASP я использую эту функцию для получения даты в формате Json

  public static double JsonTime(DateTime dt)
    {//Convert datetime to a Json Datetime
        DateTime d1 = new DateTime(1970, 1, 1);
        DateTime d2 = dt.ToUniversalTime();
        TimeSpan ts = new TimeSpan(d2.Ticks - d1.Ticks);
        return Math.Round( ts.TotalMilliseconds,0);
    } 
  

и затем в JavaScript я использую:

 if (data.indexOf("/Date(")==7)
       return  new Date( data.replace(/D/g, ''));
  

чтобы преобразовать обратно в дату, если это поможет

Вы также получите удовольствие от одинарных и двойных кавычек, но, хоть убейте, я не могу найти декодер, который работает на стороне сервера со строками Json в Net Framework 3!

если вы используете String =»u0027″ в своем коде, то строка уже преобразована, и в итоге я написал функцию, которая примерно выполняет эту работу с помощью цикла.

 string Padding = "000";
                for (int f = 1; f <= 256; f  )
                {
                    string Hex = "\u"   Padding.Substring(0, 4 - f.ToString().Length)   f;
                    string Dec = "amp;#"   Int32.Parse(f.ToString(), NumberStyles.HexNumber)   ";";
                    HTML = HTML.Replace(Hex, Dec);
                }
                HTML = System.Web.HttpUtility.HtmlDecode(HTML);
  

Плохо, что я знаю, но если у вас есть ответ получше, пожалуйста, дайте мне знать!