简体   繁体   English

解析错误JSON.parse(意外令牌u)

[英]parsing error JSON.parse(unexpected token u)

var storage = chrome.storage.local;
var cachedStorage = {};

this is js file.It shows unexpected token u.even though I've done parsing correctly.and it also shows unexpected token for for its html source page.can any one suggest me how to sort this out. 这是js文件。它显示了意外的令牌u。即使我已经正确解析了。它也显示了其html源页面的意外令牌。有人可以建议我如何解决这个问题。


var defaultStorage = [{
  savedPatterns: JSON.stringify([
    [{
      "en": "English"
    }, {
      "it": "Italian"
    }, "25", true],
    [{
      "en": "English"
    }, {
      "la": "Latin"
    }, "15", false]
  ]),

}];

error occurs here unexpected token u 错误发生在这里,意外的令牌u

function createPattern() {
  console.log('createPattern begin');
  var patterns = JSON.parse(S('savedPatterns'));
  var srce = [],
    trg = [],
    prb = [];
  console.log(S('savedPatterns'));
  console.debug(S('savedPatterns'));
  var translator = document.getElementById('translatorService');
  var service = translator.children[translator.selectedIndex].value;
  srce[0] = document.getElementById('sourceLanguage');
  srce[1] = srce[0].children[srce[0].selectedIndex].value;
  srce[2] = srce[0].children[srce[0].selectedIndex].text;
  trg[0] = document.getElementById('targetLanguage');
  trg[1] = trg[0].children[trg[0].selectedIndex].value;
  trg[2] = trg[0].children[trg[0].selectedIndex].text;
  prb[0] = document.getElementById('translationProbability');
  prb[1] = prb[0].children[prb[0].selectedIndex].value;

  patterns.push([
    [srce[1], srce[2]],
    [trg[1], trg[2]],
    prb[1],
    false,
    service
  ]);
  saveBulk({
    'savedPatterns': JSON.stringify(patterns)
  }, 'Saved Pattern');
  console.log('createPattern end');
}

function S(key) {
  return cachedStorage[key];
}

function loadStorageAndUpdate(callback) {
  storage.get(null, function(data) {
    console.log('data: ' + data + ' : ' + JSON.stringify(data));
    var d = {};
    if (!data || JSON.stringify(data) == '{}') { // in this case, storage was not initialized yet
      console.log('setting storage to defaultStorage (stringified): ');
      console.log(JSON.stringify(defaultStorage));
      storage.set(defaultStorage);
      d = defaultStorage;
    } else {
      d = data;
    }

    cachedStorage = d;
    if (!!callback) {
      callback(d);
    }
  });
}

Error Unexpected token comes when JSON.parse fails and depending on character ( u in this case), you can assume its cause. 错误当JSON.parse失败时出现Unexpected token ,根据字符(在这种情况下为u ),您可以假定其原因。

  • u is if value is undefined u是如果值未定义
  • o is if value is object o是如果值是对象

 try { JSON.parse(undefined) } catch (ex) { document.write(ex.message + "<br/>") } try { JSON.parse({}) } catch (ex) { document.write(ex.message) } 

You can try something like this: 您可以尝试如下操作:

function s(key) {
  var obj = {
    foo: "foo",
    bar: "bar"
  }
  var v = null;

  try {
    v = JSON.parse(obj[key]);
  } catch () {
    v = obj[key];
  }

  return v;
}

function main() {
  var v = s("foo");
}

Please refer following post for more information. 请参考以下帖子以获取更多信息。 Uncaught SyntaxError: Unexpected token with JSON.parse 未捕获的SyntaxError:带有JSON.parse的意外令牌

You're trying to parse undefined . 您正在尝试解析undefined When you call JSON.parse() , you're passing in S('savedPatterns') , which in turn tries to access cachedStorage['savedPatterns'] , but that starts as undefined , which you can't parse. 当您调用JSON.parse() ,您传入的是S('savedPatterns') ,后者依次尝试访问cachedStorage['savedPatterns'] ,但开头是undefined ,您无法解析。 You could just initialize your cachedStorage as: 您可以将cachedStorage初始化为:

var cachedStorage = {
  savedPatterns: JSON.stringify([])
};

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM