语法错误:“[object Object]”不是有效的 JSON [已解决]

语法错误:“ [object Object] ”不是有效的 JSON

Unexpected token o in JSON at position 1 error in JS

“SyntaxError: “ [object Object] “ is not valid JSON” 错误发生在我们尝试JSON.parse一个不是有效 JSON 字符串的值时,例如本机 JavaScript 对象。

要解决该错误,JSON.stringify()如果需要将值转换为 JSON,请使用该方法。

语法错误对象对象不是有效的 json

根据您的浏览器或 Node.js 版本,您可能还会收到名为“SyntaxError:位置 1 的 JSON 中的意外标记 o”的错误。

SyntaxError: "[object Object]" is not valid JSON Uncaught SyntaxError:️ Unexpected token o in JSON at position 1

位置 1 的 json 中的意外标记 o

错误发生的例子

以下是错误发生方式的一些示例。

索引.js
// ⛔️ SyntaxError: "[object Object]" is not valid JSON // Unexpected token o in JSON at position 1 JSON.parse({}); // 👈️ parsing a JS object // ✅ If you meant to convert a value to JSON const jsonStr = JSON.stringify({site: 'bobbyhadz.com'}); // -------------------------------------------------- // ⛔️ SyntaxError: // Unexpected token o in JSON at position 1 JSON.parse({a: 'b'}); // 👈️ parsing a JS object // -------------------------------------------------- // ⛔️ (if using jQuery) // ⛔️ SyntaxError: // Unexpected token o in JSON at position 1 $.parseJSON({}) // 👈️ parsing a JS object

我们将原生 JavaScript 对象传递给
JSON.parse方法。

如果值已经是JS对象,就不用解析了

如果该值已经是原生 JavaScript 值(而非 JSON),则您不必使用JSON.parse$.parseJSON方法。

您可以按原样在代码中使用该值。

在这种情况下,您可以删除对该JSON.parse()方法的调用并按原样使用该对象。

索引.js
// ✅ remove the call to the JSON.parse method const obj = { name: 'Bobby Hadz', age: 30, }; console.log(obj.name); // 👉️ Bobby Hadz console.log(obj.age); // 👉️ 30

您可以使用运算符检查值的类型typeof

索引.js
// ✅ don't have to use JSON.parse console.log(typeof {}); // 👉️ "object" console.log(typeof []); // 👉️ "object" console.log(typeof 42); // 👉️ "number"
所有 JSON 值的类型都是string. 如果值的类型不是string,则它不是 JSON,而是可以直接在代码中使用的本机 JavaScript 值。

jQueryaxios等库
会自动将 JSON 响应解析为原生 JavaScript 值,因此您不必使用该
JSON.parse()方法,因为该值已经被解析。

用于JSON.stringify()将值转换为 JSON

如果您尝试将值转换为 JSON,请改用JSON.stringify()以下方法:

索引.js
// ✅ is now valid JSON string const json = JSON.stringify({name: 'Bobby'}); console.log(json); // 👉️ {"name":"Bobby"} console.log(typeof json); // 👉️ string

JSON.stringify
()
方法将原生 JavaScript 值转换为 JSON 字符串。

如果您尝试将 JSON 字符串解析为原生 JavaScript 值,则必须在解析之前确保该值是有效的 JSON,或者您可以使用块来处理任何错误。 try/catch

如果出于某种原因,您必须使用JSON.parse()本机 JavaScript 对象的方法,您可以先将对象字符串化,然后再解析 JSON。

索引.js
const parsed = JSON.parse(JSON.stringify({name: 'Bobby'})); console.log(parsed); // 👉️ { name: 'Bobby' } console.log(typeof parsed); // 👉️ object

代码示例首先使用 将对象转换为 JSON 字符串
JSON.stringify()

然后,该JSON.parse()方法用于将 JSON 字符串解析为本机 JavaScript 对象。

所有的 JSON 值都是字符串类型

如果值为 JSON,则它的类型必须为string

索引.js
console.log(typeof {}); // 👉️ "object" console.log(typeof JSON.stringify([1])); // 👉️ "string"

使用try/catch语句来处理可能的错误

下面是一个示例,说明如何使用try/catch块来处理解析值时可能出现的错误。

索引.js
try { const parsed = JSON.parse({}); } catch (err) { // ⛔️ SyntaxError: "[object Object]" is not valid JSON console.log(err.message); }

JSON.parse()我们在块内调用该方法try/catch如果传递了一个无效的 JSON 值,该方法将抛出一个错误,该错误将传递给函数
catch()

catch您可以根据需要处理函数中的错误。

确保你的服务器发送正确的响应

如果您期望来自您的服务器的有效 JSON,您可以console.log使用运算符从您的服务器及其类型返回响应typeof

如果您的服务器未发送有效的 JSON,请确保将Content-Type
标头设置为
application/json在您的服务器端。

您还可以使用在线 JSON 验证器来检查 JSON 字符串是否有效。

验证器会向您显示 JSON 中是否有任何错误以及错误所在。

如果该值格式错误或无效 JSON,则必须在将其传递给方法之前正确格式化它JSON.parse

解析一个JSON字符串

JSON.parse方法将 JSON 字符串解析为原JavaScript 值。

索引.js
const jsonStr = ` { "id": 1, "name": "Alice" } `; // ✅ parse JSON string into JS value const result = JSON.parse(jsonStr); console.log(result); // 👉️ { id: 1, name: 'Alice' } console.log(typeof result); // 👉️ object // ------------------------------------------------- // ✅ convert JS value to JSON string const jsonStr2 = JSON.stringify({id: 1, name: 'Bobby'}); console.log(jsonStr2); // 👉️ '{"id":1,"name":"Bobby"}' console.log(typeof jsonStr2); // 👉️ string

JSON.stringify方法将本机 JavaScript转换为 JSON 字符串。

尝试解析本机 JavaScript 值会导致错误。

索引.js
// ⛔️ SyntaxError: "[object Object]" is not valid JSON JSON.parse({site: 'bobbyhadz.com'});

当您不确定值的类型时,请使用typeof运算符。

JSON 值始终是 type string如果该值不是 type string,则它不是 JSON。

如果您收到错误“SyntaxError: JSON.parse unexpected character”,请点击
以下文章

发生错误的常见原因

“ SyntaxError : “ [object Object] “ is not valid JSON”错误的发生有多种原因:

  • 尝试使用JSON.parse(). JSON.parse请注意,如果该值已经是一个对象,则不必调用。
  • JSON.parse()尝试将值转换为 JSON 字符串时错误地使用。相反,使用该JSON.stringify()方法将 JS 值转换为 JSON。
  • 您的服务器发回不正确的响应,
    Content-Type标头可能有误。