使用 JSON.parse 方法解析数据时 JSON 中位置 0 错误的意外令牌'

Posted

技术标签:

【中文标题】使用 JSON.parse 方法解析数据时 JSON 中位置 0 错误的意外令牌\'【英文标题】:Unexpected token ' in JSON at position 0 error while parsing data using JSON.parse method使用 JSON.parse 方法解析数据时 JSON 中位置 0 错误的意外令牌' 【发布时间】:2018-07-09 03:56:30 【问题描述】:

这是从 MVC 控制器发送的字符串

'[ "When": "", "Value": "NRMFS0131", "Text": "Achieve Montana" ]'

但是当我使用 JSON.parse 解析这个时,会抛出一个异常,说 Unexpected token ' in JSON at position 0 error

请注意,在 chrome 的控制台中解析工作完全正常

【问题讨论】:

' 字符不是 JSON,您需要删除它们。理想情况下来自 MVC 控制器发送的响应。 为什么要发送string 并解析它而不是只返回 json? @StephenMuecke 从技术上讲,JSON 是一个被解析的字符串。只是OP需要解析这个以删除',然后再次解析为JSON :) 所以显示这个事务的服务器端的代码。这是高度相关的。 由于缺少重现问题的代码而投票关闭。 【参考方案1】:

开头和结尾的 ' 字符不是 json 的一部分。

针对此类情况的一般提示 - 始终在此处验证您的 json https://jsonlint.com/。它会给你详细的错误信息。

【讨论】:

【参考方案2】:

在我在 JSONLint/json 验证器中运行你的 json 之后,

这就是问题所在。

Error: Parse error on line 1:
'[ "When": "", "Val
^
Expecting 'STRING', 'NUMBER', 'NULL', 'TRUE', 'FALSE', '', '[', got 'undefined'

' 不是 JSON 的有效第一个字符,它应该是 'STRING', 'NUMBER', 'NULL', 'TRUE', 'FALSE', '', '['

您的问题可以通过按原样发送 JSON 来解决。由于您转换为任何其他类型,可能会出现 '。希望我有所帮助!

【讨论】:

嗯,这确定了问题。但这并不是真正的答案,除非您可以向 OP 展示如何修复它。 @RoryMcCrossan 添加了注意,他应该将 json 作为 json 而不是作为字符串发送。希望它能澄清他的问题。 你的编辑看起来很混乱 - JSON 一个字符串,根据它的定义。 我似乎无法仅凭我的假设给出进一步的解决方案,我还需要知道后端代码才能提供一个好的解决方案,无论如何我会编辑字符串部分。【参考方案3】:

stringify 你的jsonparse 之前。

var str = [
  "When": "??",
  "Value": "NRMFS0131",
  "Text": "Achieve Montana"
];
var Result=JSON.stringify(str);
Result=JSON.parse(Result);
console.log(Result);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

【讨论】:

对象正在构造并从控制器发送,而不是在视图中构造 把你的 json 字符串像上面一样放在 str 上。 .

以上是关于使用 JSON.parse 方法解析数据时 JSON 中位置 0 错误的意外令牌'的主要内容,如果未能解决你的问题,请参考以下文章

JSON.parse和eval的区别

JSON.parse()

JSON.parse()

JSON.parse()

json数据解析重要的一点

Json.parse()