fix(JSON): json date parsing same native/ngular parser

This commit is contained in:
Misko Hevery 2011-11-03 10:28:28 -07:00
parent bee6060e4b
commit c6d2549a52
2 changed files with 14 additions and 12 deletions

View file

@ -40,15 +40,17 @@ function fromJson(json, useNative) {
try {
if (useNative && window.JSON && window.JSON.parse) {
obj = JSON.parse(json);
return transformDates(obj);
} else {
obj = parser(json, true).primary()();
}
return parser(json, true).primary()();
return transformDates(obj);
} catch (e) {
error("fromJson error: ", json, e);
throw e;
}
// TODO make forEach optionally recursive and remove this function
// TODO(misko): remove this once the $http service is checked in.
function transformDates(obj) {
if (isString(obj) && obj.length === DATE_ISOSTRING_LN) {
return angularString.toDate(obj);

View file

@ -27,9 +27,8 @@ var OPERATORS = {
};
var ESCAPE = {"n":"\n", "f":"\f", "r":"\r", "t":"\t", "v":"\v", "'":"'", '"':'"'};
function lex(text, parseStringsForObjects){
var dateParseLength = parseStringsForObjects ? DATE_ISOSTRING_LN : -1,
tokens = [],
function lex(text){
var tokens = [],
token,
index = 0,
json = [],
@ -199,12 +198,13 @@ function lex(text, parseStringsForObjects){
escape = true;
} else if (ch == quote) {
index++;
tokens.push({index:start, text:rawString, string:string, json:true,
fn:function() {
return (string.length == dateParseLength)
? angular['String']['toDate'](string)
: string;
}});
tokens.push({
index:start,
text:rawString,
string:string,
json:true,
fn:function() { return string; }
});
return;
} else {
string += ch;
@ -219,7 +219,7 @@ function lex(text, parseStringsForObjects){
function parser(text, json){
var ZERO = valueFn(0),
tokens = lex(text, json),
tokens = lex(text),
assignment = _assignment,
assignable = logicalOR,
functionCall = _functionCall,