【发布时间】:2023-04-08 05:58:02
【问题描述】:
我在下面的这段代码中不断收到这个错误:
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);
});
}
Parsing JSON giving "unexpected token o" error 和 I keep getting "Uncaught SyntaxError: Unexpected token 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.parse 一些还没有准备好被解析的东西?
更新
好的,所以有时 JSON 显然是无效的,有时不是,到目前为止,我在下面的 sn-p 方面做得很好,没有错误,想法?
if (typeof alert === 'object') {
// do nothing...
} else {
var alert = JSON.parse(alert);
}
大多数时候JSON.parse(message.data) 的alert 结果是string,所以我需要另一个检查来双重解析它。
【问题讨论】:
-
当我
JSON.parse(...)你的第一个字符串(嗯,它的一个有效子集)时,我得到了最终对象,而不是你声称得到的临时字符串。如果我解析 那个 对象,我会得到你得到的错误...... -
您的
parseJSON 不完整!请分享完整的 JSON 结果,以便我们发现错误。 -
对不起,它是完整的,它只是超级大,我不想发布整个东西。
-
您更新的
message.data不可能是实际数据,不是吗?它在第一个引号之后和最后一个引号之前有换行符。而那些三重反对 - 这就是数据中真正的内容吗? -
@LeonGaban 你更新的
message.data完全无效,开头有两个` "`,它的无效字符串,解析为json 离它很远。
标签: javascript json parsing