2012-03-19 2 views
0

Я пытаюсь найти способ разбора строки JSON, которая содержит объект Date.Как разбирать строку JSON с атрибутом Date

> var obj = {} 
> obj.date = new Date(); 
Mon Mar 19 2012 15:14:22 GMT-0700 (PDT) 
> obj.number = 1 
1 
> obj.float = 1.1 
1.1 
> obj.str = "hello" 
"hello" 
> obj 
Object 
date: Mon Mar 19 2012 15:14:22 GMT-0700 (PDT) 
float: 1.1 
number: 1 
str: "hello" 

> YAHOO.lang.JSON.stringify(obj) 
"{"date":"\"2012-03-19T22:14:22Z\"","number":1,"float":1.1,"str":"hello"}" 

> parsed = YAHOO.lang.JSON.parse(str) 
Object 
date: ""2012-03-19T22:14:22Z"" 
float: 1.1 
number: 1 
str: "hello" 

посмотреть, что parsed.date является строкой, где obj.date был ранее объектом Date. Каков наилучший способ разбора JSON с вложенными объектами?

спасибо

ответ

2

JSON не может быть использован для десериализации объектов (Date> Струнные >Date).
Только строки, цифры, объекты (литералы), массивы, булевы и нуль могут быть последовательно сериализованы.

Вы должны написать специальный анализатор, который имеет дело с Date объекта следующим образом:

  • Синтаксическая: Разбираем метку времени с помощью Date конструктора. например new Date(timestamp);.

    function parse(str) { 
        var obj = YAHOO.lang.JSON.parse(str); 
        obj.date = new Date(obj); 
    } 
    
0

Использование юй stringToDate функция stringToDate превращает строки в ISO8601 формате UTC в Даты:

var parsed = YAHOO.lang.Json.stringToDate(str); 

parsed.date теперь будет содержать объект Date и другой элемент будет de_serialized тоже.

см. Пример here.