2016-02-07 2 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

Да, это была вина! На стороне сервера я обработал свой возвращенный список объектов String перед отправкой сообщения. Затем двойная инвертированная запятая помещается в ответ. Теперь я отправляю список объектов непосредственно без его разбора, и теперь он отлично работает. Спасибо за вашу помощь ! – 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