function openWebsocket(url) {
var ws;
ws = $websocket(url);
ws.onOpen(function(event) {
console.log(' Websocket connection established:', event);
});
ws.onMessage(function(message) {
var userObj = UserFactory.getUserObject();
var settings = userObj.alert_settings;
// The JSON parsing...
var parsedMsg = JSON.parse(message.data);
var alert = JSON.parse(parsedMsg);
var date = new Date(parseFloat(alert.start_epoch+'000'));
alert.hour = date.getHours() +':'+date.getMinutes();
alert.percent_change = Math.round(alert.percent_change);
var shouldPush = main_alert_filter(settings, alert);
updateFeed(alerts, shouldPush, alert);
});
}
我查看了解析JSON时出现“意外的令牌o”错误和我一直收到“未捕获的SyntaxError:意外的令牌o”
但是,两个答案都没有帮助。当我首先运行JSON.parse(message.data)时,我会得到一个字符串而不是对象。因此,我必须再次运行JSON.parse才能最终得到真正的对象。
这就是message.data的样子:
"
"{\"term\": \"\\\"nike\\\"\", \"percent_change\": 125, \"hour\": \"10:9\", \"term_id\": 2890413, \"start_epoch\": 1420474140, \"term_trend_id\": 793950, \"end_epoch\": 1420477740, \"formatted_date_difference\": \"January 5, 2015\", \"tickers\": [\"NKE\", \"$PUM\", \"ADDYY\", \"LULU\", \"UA\", \"HIBB\"], \"twitter_preview\": \"\", \"type\": \"spike\", \"approved\": 1, \"search_preview\": [\"\"]}"
"
现在,在第一次解析之后,parsedMsg
是一个看起来像这样的字符串:
{"term": "minimum wage +increase", "percent_change": 729, "hour": "9:14", "term_id": 2522115, "start_epoch": 1447168440, "term_trend_id": 657898, "end_epoch": 1447175700, "formatted_date_difference": "November 10, 2015", "tickers": ["$JAB", "$SLCY", "AAL", "AAPL", "ABCD", "ABTL", "ADDYY", "ADM", "AEO", "AFCO", "AHC"......
最后,我需要一个实际的对象,所以我必须再次运行JSON.parse才能得到这个:
Object {term: "minimum wage +increase", percent_change: 729, hour: "9:14", term_id: 2522115, start_epoch: 1447168440…}
另外需要注意的是,当我在Chrome中逐步执行时,我从未遇到过该错误。只有在我没有设置断点时才会发生。这可能是一种竞争条件问题吗?例如,它尝试解析还没有准备好解析的内容?
更新
好的,看起来有时JSON是无效的,有时不是。目前,使用以下代码片段,我没有出现错误,您有什么想法?
if (typeof alert === 'object') {
// do nothing...
} else {
var alert = JSON.parse(alert);
}
大多数情况下,
JSON.parse(message.data)
的 alert
结果是一个 string
,因此我需要另一个检查来进行二次解析。
JSON.parse(...)
解析你的第一个字符串(一个有效的子集),我得到了最终的对象,而不是你所声称得到的中间字符串。如果我解析那个对象,我会得到你得到的错误... - seairthparse
JSON 不完整!请分享完整的 JSON 结果,以便我们找到错误。 - M.Tanzilmessage.data
不可能是实际数据,或者说它确实是吗?第一个引号后和最后一个引号前有换行符。那些三个反斜杠 - 这才是数据中真正的内容吗? - Michael Gearymessage.data
完全无效,开头有两个"
,这是无效的字符串,解析为 JSON 格式还有很长的路要走。 - M.Tanzil