JavaScript JSON.parse无法正常工作

时间:2019-03-16 19:27:38

标签: javascript

我从服务器接收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接受的答案对此解析了

2 个答案:

答案 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没有其他作用。