2016-03-08 15 views
0

我有一個$ http get方法,它應該調用我的本地服務器。我通過郵遞員從我的服務器得到了正確的答覆。 以下是我的JSON值:如何解析值爲「id」的Json數組:1.1.1.1

[{"id":27885,"bslRef":acms.2016.04.00,"size":0,"isDefault":true,"baselineDate":null,"parentRef":null,"activities":null,"default":true,"open":true,"daily":false}] 

由於"bslRef":acms.2016.04.00這是我感興趣的不是封閉在一個JSON標籤(「」)的值。

這就是爲什麼我得到一個解析錯誤。 這是我從jsonlint得到的錯誤。

Error: Parse error on line 3: 
...: 27885, "bslRef": acms .2016 .04 .00, 
----------------------^ 
Expecting 'STRING', 'NUMBER', 'NULL', 'TRUE', 'FALSE', '{', '[', got 'undefined' 

以下是我angularjs控制器代碼:

$http.get('/baseline/getBaseline?', {params: { 
         currProject: $scope.selectedProject}}) 
        .success(function(data) { 

         $scope.baselines=JSON.stringify(data); 
        }) 
        .error(function(data) { 
         alert("failure"); 
        }); 

我試圖用,但沒有使用parse()方法和字符串化()方法。

我的服務器端應用程序是一個spring-mvc rest應用程序,它給了我適當的響應,但是以上述格式。

請有人幫我解析這個通過角度的方法,或讓我從我的彈簧控制器的JSON類型的響應。 TIA。

+0

服務器代碼中的「bslRef」是什麼類型?還有'$ scope.baselines'是一個字符串還是一個對象?如果它是一個對象,不需要'JSON.stringify'。 –

+0

$ scope.baselines是一個對象。它具有[{「id」:27885,「bslRef」:acms.2016.04.00,「size」:0,「isDefault」:true,「baselineDate」:null,「parentRef」:null,「activities」 :null,「default」:true,「open」:true,「daily」:false}] –

+0

bslref是服務器代碼中的對象類型。 –

回答

0

問題解決了。實際上,在我的基線pojo類中,我添加了以下Json註釋。

private long id; 
@JsonSerialize(as = BaselineRef.class) 
@JsonRawValue 
private BaselineRef bslRef; 
private int size; 
@JsonProperty 
private boolean isDefault = false; 
private boolean isOpen = true; 
private boolean isDaily = false; 
private String baselineDate; 
private BaselineRef parentRef; 
private Collection<String> activities; 

因此,當檢索我得到以下類型的響應。

[{"id":27885,"bslRef":acms.2016.04.00,"size":0,"isDefault":true,"baselineDate":null,"parentRef":null,"activities":null,"default":true,"open":true,"daily":false}]. 

一旦我刪除了註解現在我得到

`[{"id":27885,"bslRef":{"bslName":"2016.04.00","projectName":"acms","overrides":false},"size":0,"baselineDate":null,"parentRef":null,"activities":null,"default":true,"open":true,"daily":false}]` 

這是我所期望的響應。在這裏我確保了BaselineRef有一個toString方法。 在這裏我不必解析我的角碼。感謝大家的幫助。

0

其中一個解決辦法是使用變換函數來處理repsone當它返回響應對象自己...

這可以在角度文檔中找到。

$http({ 
url: '...', 
method: 'GET', 
//here you get the unparserd response ... 
transformResponse: appendTransform($http.defaults.transformResponse, 

    //you data response comes here ..which you can handle customly 
    function(data) { 
     //perform modifications & get data 
     $scope.baselines = doTransform(data); 
    }) 
}); 

然後,您可以根據需要將數據綁定到Html DOM。這是爲單個獲取請求。如果您想在所有地方使用它,請嘗試創建服務或工廠。

謝謝,HTH