vue获取json的一个小问题

json:

{
  "code": 0,
  "msg": "success",
  "data": [
    {
      "symbol": "BTC",
      "price": 56473.54,
      "openInterest": 20556043828.255978,
      "volUsd": 80300126118.31464,
      "openInterestAmount": 364049.3,
      "longRate": 52.83,
      "longVolUsd": 40150822052.32335,
      "shortRate": 47.17,
      "shortVolUsd": 40156423832.06615,
      "turnoverNumber": 13221636,
      "priceChange": 1546.35,
      "priceChangePercent": 2.82,
      "volChangePercent": -30.3,
      "symbolLogo": "https://cdn.sampyun.com/static/coins/btc@2x.png",
      "liqInfo": {
        "symbol": "BTC",
        "longVolUsd": 166022220.78610313,
        "shortVolUsd": 467377610.54825574,
        "symbolLogo": "https://cdn.sampyun.com/static/coins/btc@2x.png",
        "totalVolUsd": 633399831.3343589,
        "amount": 11217.5655,
        "number": 34156
      },
      "tags": [
        
      ],
      "oichangePercent": -0.45
    }
}

我想获取liqInfo下的totalVolUsd:

<tr v-for="(item,index) in sitea">
	<td align="right">{{item.liqInfo.totalVolUsd}}</td>
</tr>

但是报错:

TypeError: Cannot read property 'totalVolUsd' of undefined

用的是vue2.6.12版本。

<tr v-for="(item,index) in sitea">


    <td align="right">{{(item.liqInfo || {}).totalVolUsd}}</td>


</tr>

item.liqInfo 数据为undefined 做容错处理

你这个list数据sitea,获取估计有问题

<tr v-for="(item,index) in data">
	<td align="right">{{item.liqInfo.totalVolUsd}}</td>
</tr>

应该是data吧,除非你其他的地方把data赋值给了sitea,那你就先打印item看有没有值

将Json赋值给某个对象,let formData = {};在获取Json后将其赋值给formData = data.data或者是formData = data.data.liqInfo;这样应该就可以获取到了

知道问题了。。你的数据接口返回的数据GOLD这个货币没有liqInfo,所以报错了。要将丢失liqInfo的项加上就行了~

axios.get('http://video.w3dev.cn/index/bit')
                    .then((res) => {
                        var data = res.data.data.filter(function (i) { return !i.liqInfo });
                        for (let v of data) v.liqInfo = { totalVolUsd:0};//补全liqInfo就可以了

                        vm.sitea = res.data.data
                      
                       
                      
                    })
                    .catch(error => { console.log(error); })

 

你的Json格式错误的,倒数第二行少了一个"]",正确的格式如下:

{


	"code": 0,


	"msg": "success",


	"data": [


		{


			"symbol": "BTC",


			"price": 56473.54,


			"openInterest": 20556043828.255978,


			"volUsd": 80300126118.31464,


			"openInterestAmount": 364049.3,


			"longRate": 52.83,


			"longVolUsd": 40150822052.32335,


			"shortRate": 47.17,


			"shortVolUsd": 40156423832.06615,


			"turnoverNumber": 13221636,


			"priceChange": 1546.35,


			"priceChangePercent": 2.82,


			"volChangePercent": -30.3,


			"symbolLogo": "https://cdn.sampyun.com/static/coins/btc@2x.png",


			"liqInfo": {


				"symbol": "BTC",


				"longVolUsd": 166022220.78610313,


				"shortVolUsd": 467377610.54825574,


				"symbolLogo": "https://cdn.sampyun.com/static/coins/btc@2x.png",


				"totalVolUsd": 633399831.3343589,


				"amount": 11217.5655,


				"number": 34156


			},


			"tags": [





			],


			"oichangePercent": -0.45


		}
	]


}

可能某条数据中缺失 totalVolUsd 这个字段,容错一下