2013-04-12 62 views
7

我一直在做一個Ajax請求,但似乎有問題。當我的json屬性名稱在「(如{」name「:value」})時,它可以工作,但屬性名稱不是。我有以下excepitonAngularJS JSON解析(ajax)

SyntaxError: Unexpected token s 
at Object.parse (native) 
at pb (http://localhost:8080/angularjs/lib/angular.min.js:12:472) 
at Vc.d.defaults.transformResponse (http://localhost:8080/angularjs/lib/angular.min.js:92:314) 
at http://localhost:8080/angularjs/lib/angular.min.js:92:127 
at Array.forEach (native) 
at n (http://localhost:8080/angularjs/lib/angular.min.js:6:192) 
at Qb (http://localhost:8080/angularjs/lib/angular.min.js:92:109) 
at c (http://localhost:8080/angularjs/lib/angular.min.js:93:295) 
at h (http://localhost:8080/angularjs/lib/angular.min.js:77:437) 
at http://localhost:8080/angularjs/lib/angular.min.js:78:169 

這裏是我的代碼:

的index.html:

<!doctype html> 
<html ng-app> 
<head> 
<script src="lib/angular.min.js"></script> 
<script src="js/indexApp.js"></script> 
</head> 
<body> 
    <div> 
     <div ng-controller="AjaxController"> 
      {{users.data}} 
     </div> 
    </div> 
</body> 
</html> 

indexApp.js

function AjaxController($scope, $http) { 
$scope.beers = [ 0, 1, 2, 3, 4, 5, 6 ]; 
console.log("OMW"); 
$http({ 
    method : 'GET', 
    url : 'data.json' 
}).success(function(data, status, headers, config) { 
    $scope.users = data; 
}).error(function(data, status, headers, config) { 
    $scope.users = "error" + data; 
}); 

};

data.json

{ 
    success : "true", 
    data: [{name:"val"}] 
} 

回答

18

必須包屬性名在"。這是指定有效傳輸JSON的唯一方法,在可執行JavaScript上下文中該JSON比對象表示更嚴格。如果您嘗試使用更寬鬆的表示法,任何JSON解析器都會失敗。

另請參閱the spec for JSON其中規定這一點。

+1

你救了我的週末工作,男人。萬分感謝。 – curlyreggie

+0

@Ezekiel Victor你是如何包裝屬性名稱的? – Despertaweb

+0

@Despertaweb你是什麼意思?用雙引號括起屬性名稱;例如'「name」'而不是'name'。如果您使用任何JSON序列化器,例如'JSON.stringify(...)'或PHP'json_encode(...)'它會爲你正確地做到這一點。 –

8

即使我有類似的問題和解決方案,您的字符串數據應該是在一個特定的格式爲JSON.parseangular.fromJson工作。

對於前:

var myString = '{"name":"nomad"}'; 
console.log(JSON.parse(myString)); 

控制檯輸出爲:對象{名: 「遊牧」}

0

對我來說,這是返回以下錯誤:

SyntaxError: Unexpected token '

at Object.parse (native)

at fromJson (http://www.example.com/bower_components/angular/angular.js:1072:14)

所以我們發現內部在角度上發生的事情如下:

JSON.parse("{'error': 'message'}"); // error 

事實上,它返回一個解析器錯誤,因爲它預計JSON將包含",as the accepted answer points out的字符串。

所以,我們只固定服務器響應符合JSON string specification

JSON.parse('{"error": "message"}'); // works! 
1

我有同樣的錯誤。 firstName中的一個是像這樣的空字符串。 {"firstName":"", "lastName":"Doe"} 編輯:這個錯誤也可能意味着你的json文件中主要有一些語法錯誤。例如註釋掉json文件中的一些內容,或者不在逗號之間給出分隔兩個鍵值對的空間也會拋出相同的錯誤。非常初學者的錯誤認爲這會幫助其他人。