reactjs React -JSON解析的正确语法

w8biq8rn  于 2022-12-26  发布在  React
关注(0)|答案(1)|浏览(134)

我正在从const details中提取交易详细信息,并且需要从JSON paymentResponse中提取brand。我收到了一个未定义的错误,但let cardType中的所有内容看起来都正确。我遗漏了什么?
let cardType = JSON.parse(orderDetails.paymentResponse).data?.payment_method_details?.card?.brand;
代码:

const [orderDetails, setOrderDetails] = useState({});
  
  const getOrderDetails = async () => {
    let data = {};
    data.orderId = params.id;
    const details = await orderApi.getOrderDetails(userAuthToken, data);
    if (details && details.data.success) {
      if (details.data.data.length > 0) {
        setOrderDetails(details.data.data[0]);
      } else {
        navigate('/');
      }
    } else {
      navigate('/');
    }
  };

  useEffect(() => {
    (async () => {
      if (params.id) {
        setLoading(true);
        await getOrderDetails();
        setLoading(false);
      } else {
        navigate('/');
      }
    })();
  }, [params.id]);
  //
  let cardType = JSON.parse(orderDetails.paymentResponse).data?.payment_method_details?.card?.brand;

  console.log(cardType);

JSON结构,其中brand为:

{
   "data":{
      "payment_method_details":{
         "card":{
            "brand":"jcb"
         }
      }
  }
}
new9mtju

new9mtju1#

由于orderDetails对象在组件首次加载时为空,因此orderDetails.paymentResponse未定义,尝试访问其data属性会抛出错误。您需要处理此未定义变量,因为JSON.parse无法为您执行此操作。由于您已经使用optional chaining操作符,因此按如下所示更改特定行应该可以消除此错误:

let cardType = JSON.parse(orderDetails?.paymentResponse || "{}")?.data?.payment_method_details?.card?.brand;

相关问题