javascript - 位置 1 的 JSON 中的意外标记 o

标签 javascript json parsing

我在下面的这段代码中不断收到此错误:

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" errorI keep getting "Uncaught SyntaxError: Unexpected token o"

然而,这两个答案都没有帮助。因为当我第一次运行 JSON.parse(message.data) 时,我得到的是一个字符串而不是一个对象。因此,我必须再次运行 JSON.parse 才能最终得到一个真实的对象。

enter image description here

这就是 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\":\"2015 年 1 月 5 日\",\"代码\": [\"NKE\",\"$PUM\",\"ADDYY\",\"LULU\",\"UA\",\"HIBB\"],\"twitter_preview\":\"\",\"类型\":\"spike\",\"approved\": 1,\"search_preview\": [\"\"]}" “

现在在第一次解析之后 parsedMsg 是一个看起来像这样的字符串:

{"term": "最低工资+增加", "percent_change": 729, "hour": "9:14", "term_id": 2522115, "start_epoch": 1447168440, "term_trend_id": 657898, "end_epoch": 1447175700, "formatted_date_difference": "2015 年 11 月 10 日", "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 显然无效,有时无效,到目前为止,我在使用以下代码段时没有错误,想法很好?

if (typeof alert === 'object') {
    // do nothing...
} else {
    var alert = JSON.parse(alert);
}

大多数时候 JSON.parse(message.data)alert 结果是一个 string 所以我需要其他检查双重解析。

最佳答案

你为什么要第二次解析你的json,它已经在第一次尝试中被解析了。

查看片段

var obj = "{\"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\"]}";
$(function(){
  var data = JSON.parse(obj);
  alert(typeof data);
  console.log(data.tickers[0] +" -> an item in `tickers` array");
  console.log(data.tickers);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

关于javascript - 位置 1 的 JSON 中的意外标记 o,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38576691/

相关文章:

javascript - dotenv 中导出 SOME_ENV_VAR=KEY 和 SOMEOTHER_ENV_VAR=KEY 之间的区别?

ruby - 在 Ruby 中读取大型 JSON 文件时出现问题

php - 在客户端使用 JSON 获取 fb 访问 token

c++ - 阅读 Targa 文件。缺少深色?

java - Java 中的 .Net CultureInfo.InvariantCulture

javascript - 遍历加载的 HTML 文件元素 JQuery

javascript - axios在控制台上打印值但返回未定义

javascript - React Ref Form onSubmit Handler 未触发

javascript - 当名称未知时查找并存储 JSON 嵌套数组

javascript - JS - 比较字符串中单词的长度,忽略非字母字符