【问题标题】:Iterate through json array from stomp message response (JavaScript)从 stomp 消息响应 (JavaScript) 中迭代 json 数组
【发布时间】:2016-02-08 04:49:15
【问题描述】:

我从 STOMP 订阅中获得消息体响应,如下所示:

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

为了遍历它,我将它解析为 json 并得到这个:

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

现在,当我尝试遍历它时,我收到以下错误消息:

未捕获的 TypeError:无法使用 'in' 运算符在 [{"name":"test","version":"1.0.4","lifetime":25000}] 中搜索 '86'

任何人都可以帮助我并说出我做错了什么吗?

这是我的代码:

      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__: 
}

【问题讨论】:

  • body: ""[{\"name\":\"test\",\"version\":\"1.0.4\",\"lifetime\":25000}]"" 为什么会给出 2 * 双引号?
  • 是的,这就是问题所在!在服务器端,我在发送消息之前将返回的对象列表解析为字符串。然后将双引号置于响应中。现在我直接发送对象列表而不解析它,现在它工作正常。感谢您的帮助!
  • 欢迎您。喜欢找到溶胶。 :)

标签: javascript json stomp


【解决方案1】:

因为值低于[]。你需要经过两个$.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>');
   });
});
&lt;script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"&gt;&lt;/script&gt;

【讨论】:

  • 使用 jsonObj 的修复输入,您的解决方案可以工作。但是当我将validationMessage.body 放到jsonObj (var jsonObj = JSON.parse(validationMessage.body)) 时,同样的错误信息再次出现。但是jsonObj的值是完全一样的。
  • 感谢您的帮助 Kanudo。这也有效。但是当我使用validationMessage.body 作为输入时我仍然有问题。它的值与您使用的字符串完全相同。但是仍然无法循环。这可能是编码问题吗?那很奇怪。我在第一篇文章中添加了 validationMessage 的值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-19
  • 2018-10-16
相关资源
最近更新 更多