代码之家  ›  专栏  ›  技术社区  ›  Kyle Underhill

React-JSON解析的正确语法

  •  0
  • Kyle Underhill  · 技术社区  · 2 年前

    我正在从中提取交易详细信息 const details 我需要退出 brand 来自JSON paymentResponse 。我收到一个未定义的错误,但所有内容都在 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);
    

    enter image description here

    JSON结构,其中 品牌 是:

    {
       "data":{
          "payment_method_details":{
             "card":{
                "brand":"jcb"
             }
          }
      }
    }
    
    1 回复  |  直到 2 年前
        1
  •  1
  •   Daksh    2 年前

    自从你 orderDetails 当您的组件首次加载时,对象为空 orderDetails.paymentResponse 未定义,并且试图访问其 data 属性正在引发错误。您需要处理这个未定义的变量,因为 JSON.parse 不能为你做那件事。由于您已经在使用 optional chaining 运算符,按如下方式更改该特定行应该可以消除错误:

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