325

当我在 chrome 中运行我的页面时,我收到此错误“未捕获的语法错误意外令牌 U”。在 Firefox 中,我得到“JSON.parse:意外字符”。我正在从 php 文件返回 json 数据,并且返回的 json 字符串是有效的。我用http://jsonlint.com/检查了它。任何帮助将不胜感激......谢谢。

这是返回的 JSON 字符串

[
    ["1","Pan Africa Market","\"1521 1st Ave, Seattle, WA\"","47.608941","-122.340145","restaurant"],
    ["2","The Melting Pot","14 Mercer St, Seattle, WA","47.624562","-122.356442","restaurant"],
    ["3","Ipanema Grill","1225 1st Ave, Seattle, WA","47.606366","-122.337656","restaurant"],
    ["4","Sake House","230 1st Ave, Seattle, WA","47.612825","-122.34567","bar"],
    ["5","Crab Pot","1301 Alaskan Way, Seattle, WA","47.605961","-122.34036","restaurant"],
    ["6","Mexican Kitchen","2234 2nd Ave, Seattle,WA","47.613975","-122.345467","bar"],
    ["7","Wingdome","1416 E Olive Way, Seattle, WA","47.617215","-122.326584","bar"],
    ["8","Piroshky Piroshky","1908 Pike pl, Seattle, WA","47.610127","-122.342838","restaurant"]
]
4

12 回答 12

701

JSON.parse当给定的值实际为 时,通常会看到该错误undefined。所以,我会检查试图解析这个的代码——很可能你没有解析这里显示的实际字符串。

于 2012-10-23T02:00:58.463 回答
14

我在验证时收到此消息(在 MVC 项目中)。对我来说,添加ValidationMessageFor元素解决了这个问题。

准确地说,jquery.validate.unobtrusive.js 中的第 43 行导致了这个问题:

  replace = $.parseJSON(container.attr("data-valmsg-replace")) !== false;
于 2015-10-13T13:51:40.673 回答
11

JSON.parse 的参数可能什么都不返回(即 JSON.parse 的值是undefined)!

当我从 xyz.sol 文件解析 Compiled solidity 代码时,它发生在我身上。

import web3 from './web3';
import xyz from './build/xyz.json';

const i = new web3.eth.Contract(
  JSON.parse(xyz.interface),
  '0x99Fd6eFd4257645a34093E657f69150FEFf7CdF5'
);

export default i;

拼写错误为

JSON.parse(xyz.intereface)

什么都没有返回!

于 2019-01-24T13:50:36.647 回答
5

发生此错误的最常见情况是使用生成控件的模板,然后更改方式id和/或name通过“覆盖”默认模板生成控件,例如

@Html.TextBoxFor(m => m, new {Name = ViewData["Name"], id = ViewData["UniqueId"]} )

然后忘记更改ValidationMessageFor

@Html.ValidationMessageFor(m => m, null, new { data_valmsg_for = ViewData["Name"] })    

希望这可以节省您一些时间。

于 2015-11-04T15:37:23.493 回答
3

解决该错误非常简单。

原因。Javascript 给出了该错误,因为您正在解析空字符串、对象或数组。

为了解决 这个问题,只需检查您要解析的字符串是否为空/null 或者不是。如果不为空/null,您可以解析该字符串。

let ParsedString;

if(yourString != null){
   ParsedString = JSON.parse(yourString);
}
于 2021-03-23T10:05:03.387 回答
3

当我在 for 循环中对 JSONArray 运行查找条件时遇到此错误。我面临的问题是 for 循环中的值之一返回 null 的结果。因此,当我尝试访问它失败的属性时。

因此,如果您在 JSONArrays 中做任何不确定数据源及其完整性的事情,我认为在这种情况下处理 null 和未定义的异常是一个好习惯。

我通过检查 JSONArray 上 find 的返回值是否为 null 并适当地处理异常来修复它。

认为这可能会有所帮助。

于 2017-10-12T07:46:42.133 回答
3

以防你不明白

例如,可以说我有一个 JSON 字符串 ..还不是 JSON 对象或数组。

所以如果在javascript中你将字符串解析为

var body={
  "id": 1,
  "deleted_at": null,
  "open_order": {
    "id": 16,
    "status": "open"}

var jsonBody = JSON.parse(body.open_order); //HERE THE ERROR NOW APPEARS BECAUSE THE STRING IS NOT A JSON OBJECT YET!!!! 
//TODO SO
var jsonBody=JSON.parse(body)//PASS THE BODY FIRST THEN LATER USE THE jsonBody to get the open_order

var OpenOrder=jsonBody.open_order;

上面的好答案

于 2017-04-19T08:27:53.970 回答
1

在我的例子中,它试图在 XHRResponse 返回之前在 AJAX 变量上调用 JSON.parse()。例如:

var response = $.get(URL that returns a valid JSON string);
var data = JSON.parse(response.responseText);

我用$.get 的 jQuery 站点中的示例替换了它:

<script type="text/javascript"> 
    var jqxhr = $.get( "https://jira.atlassian.com/rest/api/2/project", function() {
          alert( "success" );
        })
          .done(function() {
//insert code to assign the projects from Jira to a div.
                jqxhr = jqxhr.responseJSON;
                console.log(jqxhr);
                var div = document.getElementById("products");
                for (i = 0; i < jqxhr.length; i++) {
                    console.log(jqxhr[i].name);
                    div.innerHTML += "<b>Product: " + jqxhr[i].name + "</b><BR/>Key: " + jqxhr[i].key + "<BR/>";
                }
                console.log(div);
            alert( "second success" );
          })
          .fail(function() {
            alert( "error" );
          })
          .always(function() {
            alert( "finished" );
          });

        // Perform other work here ...

        // Set another completion function for the request above
        jqxhr.always(function() {
          alert( "second finished" );
        });
</script>
于 2015-11-30T21:22:54.943 回答
1

这个答案可能是许多人的可能解决方案。此答案适用于在使用文件上传时遇到此错误的人。

我们使用中间件进行基于令牌的加密 - 解密,我们遇到了同样的错误。

以下是我们在路由文件中的代码:

  router.route("/uploadVideoMessage")
  .post(
    middleware.checkToken,
    upload.single("video_file"),
    videoMessageController.uploadVideoMessage
  );

在这里,我们在上传功能之前调用了中间件,这导致了错误。因此,当我们将其更改为此时,它起作用了。

router.route("/uploadVideoMessage")
  .post(
    upload.single("video_file"),
    middleware.checkToken,
    videoMessageController.uploadVideoMessage
  );
于 2019-09-20T16:38:22.827 回答
0

好吧,对于那些实际上无法在代码中的任何地方找到错误的人,既不是“本地存储中所说的未定义也不是 null”......只需注释掉您的代码并编写另一个实际删除本地存储中的项目的代码。 . 之后,您可以注释或删除当前代码,并通过简单地取消注释来重新重置前一个代码(如果您 dint delet t ...如果您这样做了,您可以再次编写它:))

LocalStorage.setItem('Previous' , "removeprevious");  


LocalStorage.removeItem('Previous');   
 Console.log(LocalStorage.getItem('Previous'));

控制台将显示 null 并且如果 t 不起作用,它会再次重置您的代码,伙计!你有错误。

对不起我的英语不好!

于 2018-09-11T12:23:33.363 回答
0

这不是一项艰巨的任务。这个问题也出现在我的网站上,你应该把你的 js 文件排在最前面。因为在你使用 JSON Parsing 的地方,这一次你的 JS 文件没有加载。例子 #

<script type="text/javaScript">
...........SOME CODE.............
</script>
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>

改成

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script type="text/javaScript">
...........SOME CODE.............
</script>
于 2017-07-28T10:29:16.907 回答
-3

当我对 json 字符串和解析的 json 使用相同的变量时,我收到了这个错误:

var json = '{"1":{"url":"somesite1","poster":"1.png","title":"site title"},"2":{"url":"somesite2","poster":"2.jpg","title":"site 2 title"}}'

function usingjson(){
    var json = JSON.parse(json);
}

我将功能更改为:

function usingjson(){
    var j = JSON.parse(json);
}

现在这个错误消失了。

于 2017-11-11T08:31:18.517 回答