语法错误:“ [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,请使用该方法。
根据您的浏览器或 Node.js 版本,您可能还会收到名为“SyntaxError:位置 1 的 JSON 中的意外标记 o”的错误。
SyntaxError: "[object Object]" is not valid JSON Uncaught SyntaxError:️ Unexpected token o in JSON at position 1
错误发生的例子
以下是错误发生方式的一些示例。
// ⛔️ 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()
方法的调用并按原样使用该对象。
// ✅ 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
。
// ✅ don't have to use JSON.parse console.log(typeof {}); // 👉️ "object" console.log(typeof []); // 👉️ "object" console.log(typeof 42); // 👉️ "number"
string
. 如果值的类型不是string
,则它不是 JSON,而是可以直接在代码中使用的本机 JavaScript 值。jQuery
和axios等库
会自动将 JSON 响应解析为原生 JavaScript 值,因此您不必使用该JSON.parse()
方法,因为该值已经被解析。
用于JSON.stringify()
将值转换为 JSON
如果您尝试将值转换为 JSON,请改用JSON.stringify()
以下方法:
// ✅ 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 字符串。
try/catch
如果出于某种原因,您必须使用JSON.parse()
本机 JavaScript 对象的方法,您可以先将对象字符串化,然后再解析 JSON。
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
。
console.log(typeof {}); // 👉️ "object" console.log(typeof JSON.stringify([1])); // 👉️ "string"
使用try/catch
语句来处理可能的错误
下面是一个示例,说明如何使用try/catch
块来处理解析值时可能出现的错误。
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.parse
。
解析一个JSON字符串
JSON.parse方法将 JSON 字符串解析为原生JavaScript 值。
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 值会导致错误。
// ⛔️ 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
标头可能有误。