2016-02-07 58 views
1

我從一個STOMP訂閱郵件正文響應(如下所示)JSON數組:迭代通過從跺腳消息響應(JavaScript的)

"[{\"name\":\"test\",\"version\":\"1.0.4\",\"lifetime\":25000}]"

來遍歷它我把它解析成JSON並獲得這樣的:

[{"name":"test","version":"1.0.4","lifetime":25000}]

現在,當我嘗試來遍歷它,我得到了以下錯誤消息:

Uncaught TypeError: Cannot use 'in' operator to search for '86' in [{"name":"test","version":"1.0.4","lifetime":25000}]

任何機構可以幫助我,說我做錯了什麼?

這裏是我的代碼:

 stompClient.subscribe('/topic/validation', function(validationMessage){ 

     console.log(validationMessage.body); 
     // --> "[{\"name\":\"test\",\"version\":\"1.0.4\",\"lifetime\":25000}]" 
     var jsonObj = JSON.parse(validationMessage.body); 
     console.log(jsonObj); 
     // --> [{"name":"test","version":"1.0.4","lifetime":25000}] 

     $.each(jsonObj, function(i,item){ 
      console.log(item); 
     }); 
    }); 

在此先感謝。 validationMessage的

控制檯日誌:

Frame{ 
 
ack: (headers)arguments: nullcaller: nulllength: 1name: ""prototype: frame.ack__proto__:()<function scope> 
 
body: ""[{\"name\":\"test\",\"version\":\"1.0.4\",\"lifetime\":25000}]"" 
 
command: "MESSAGE" 
 
headers: Object 
 
content-length: "99" 
 
content-type: "application/json;charset=UTF-8" 
 
destination: "/topic/validation" 
 
message-id: "1dm_aduc-1672" 
 
subscription: "sub-0"__proto__: Objectnack: (headers)__proto__: 
 
}

+0

'身上: 「」[{\ 「名稱\」:\ 「測試\」,\ 「版本的\」:\「1.0.4 \ 「,\」lifetime \「:25000}]」「'爲什麼這給2 *雙引號逗號? – kanudo

+0

是的,那是錯!在服務器端,我在發送消息之前將返回的對象列表解析爲字符串。然後把雙引號逗號放到響應中。現在我直接發送Object列表而不解析它,現在它工作正常。謝謝你的幫助 ! – Riemses

+0

歡迎您。喜歡找到解決方案。 :) – kanudo

回答

0

由於價值[]下。你需要去通過兩個$.each

var jsonObj = [{"name":"test","version":"1.0.4","lifetime":25000}]; 
 
$.each(jsonObj, function(){ 
 
    $.each(this, function(i,item){ 
 
     $('body').append('<div>'+ item +'</div>'); 
 
    }); 
 
}); 
 

 
var jsonObj2 = {"name":"test","version":"1.0.4","lifetime":25000}; // no [] 
 
$.each(jsonObj2 , function(i,item){ 
 
    $('body').append('<div>'+ item +'</div>'); 
 
}); 
 

 
////////////////////////////////////////////////////////////// 
 

 

 
var jsonObj3 = JSON.parse('[{\"name\":\"test\",\"version\":\"1.0.4\",\"lifetime\":25000}]'); 
 
            
 
$.each(jsonObj3, function(){ 
 
    $.each(this, function(i,item){ 
 
     $('body').append('<div>'+ item +'</div>'); 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

+0

有了jsonObj的修復輸入,您的解決方案就可以運行。但是,當我把validationMessage.body jsonObj(var jsonObj = JSON.parse(validationMessage.body))再次出現相同的錯誤消息。但jsonObj的價值是完全一樣的。 – Riemses

+0

@Riemses你現在可以檢查更新的部分? – kanudo

+0

感謝您的幫助Kanudo。這也適用。但是當我使用validationMessage.body作爲輸入時,仍然存在這個問題。它的值與您使用的字符串完全相同。但它仍然無法循環。這可能是一個編碼問題嗎?那很奇怪。我將validationMessage的值添加到了我的第一篇文章中。 – Riemses