我从服务器接收JSON数组,我需要在其上使用find()方法,因此我将其转换为带有JSON.parse的Javascript对象数组以删除引号。我通过道具获得了这个数组:
const list = this.props.catList
var catList = JSON.parse(list)
然后在Web浏览器中出现错误:
Uncaught SyntaxError: Unexpected token o in JSON at position 1
at JSON.parse (<anonymous>)
代码段中的不同错误:
var inventory = [
{'name': 'apples', 'quantity': 2},
{'name': 'bananas', 'quantity': 0},
{'name': 'cherries', 'quantity': 5, 'type': [
{'name': 'rainier', 'quantity': 3},
{'name': 'bing', 'quantity': 2}
]}
];
var asd = JSON.parse(inventory)
console.log(asd)
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.0/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.0/umd/react-dom.production.min.js"></script>
我之所以使用解析,是因为我在几个答案中发现了它,并且似乎对他们有用。还有更多的链接,但我找不到它们了: Link 1接受的答案对此解析了
答案 0 :(得分:4)
您要解析的不是JSON。它已经是一个JavaScript对象,您无法使用JSON.parse
来解析对象,因此会出现错误。
var inventory = [
{'name': 'apples', 'quantity': 2},
{'name': 'bananas', 'quantity': 0},
{'name': 'cherries', 'quantity': 5, type: [
{'name': 'rainier', 'quantity': 3},
{'name': 'bing', 'quantity': 2}
]}
];
// You've already got an object. Just use it:
console.log(inventory[0].quantity)
// JSON is a string, like this:
var inventoryJSON = `[
{"name":"apples","quantity":2},
{"name":"bananas","quantity":0},
{
"name":"cherries",
"quantity":5,
"type":[
{
"name":"rainier",
"quantity":3
},
{
"name":"bing",
"quantity":2
}
]
}
]`;
// In which case, you'd need to parse it:
console.log(JSON.parse(inventoryJSON)[0].quantity);
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.0/umd/react.production.min.js"></script>
答案 1 :(得分:0)
您可以做到这一点,既整洁又可以按需工作。
const list = this.props.catList;
const catList = list instanceof Array ? list : JSON.parse(list);
上面的行检查list的实例是否是数组,JSON.parse
没有其他作用。