TypeError:无法读取从带有已定义模板的 JSON 文件中读取的未定义属性(读取“array_google”)

Posted

技术标签:

【中文标题】TypeError:无法读取从带有已定义模板的 JSON 文件中读取的未定义属性(读取“array_google”)【英文标题】:TypeError: Cannot read properties of undefined (reading 'array_google') reading from JSON file with defined template 【发布时间】:2022-01-11 02:50:05 【问题描述】:

我用过以下

模板文件 -- 读取 json 文件,因为它是给定格式的

export type GList = 
    hop_num: number,
    hostname: string,
    ip_address: string,
    latitude: number,
    longitude: number;
    rtt: string;
  ;

  export type IUList = 
    hop_num: number,
    hostname: string,
    ip_address: string,
    latitude: number,
    longitude: number;
    rtt: string;
  ;
  
  export type iData = 
    array_google : GList[];
    array_iu : IUList[];
    time : number;
;
  
  export type ResponseData = 
    ids: iData;
  ;

组件文件

import  ReactChild  from "react";
import  GList  from "../types";
import  MapContainer, TileLayer, Marker, Popup  from "react-leaflet";

interface Props 
    google_list:GList[];
    


const Map_test: React.FunctionComponent<Props> = (
    google_list
) => 
    return(
        <div id="sample">
            <MapContainer>
            google_list.map((trset) => (
            <Marker
            key=trset.hop_num
            position=[trset.latitude, trset.longitude]
            ></Marker>
            ))
            </MapContainer>
        </div>
    );
;

export default Map_test;

App.tsx 文件

import  useEffect, useState  from "react";
import  MapContainer, TileLayer, Marker, Popup  from "react-leaflet";
import "./App.css";
import trdata from "./data/tracedata.json";
import  Line  from "react-chartjs-2";
import  Chart  from "chart.js";
import type  ResponseData, IUList, GList, iData  from "./types";
import Map_test from "./components/Map_test";

const App: React.FunctionComponent = () => 
  const [data, setData] = useState<ResponseData | undefined>(undefined);

  const fetchData = async () => 
    const result = await fetch("http://18.223.114.82/pastfive");
    const data :ResponseData = await result.json();
    const id_num : number = 1;

    setData(data);
    console.log(data);
  ;

  useEffect(() => 
  fetchData();
  , []);

  // console.log(trdata[1]['google.com']);
  return (
    <div id="sample">
      <div id="heading">
        <h1>TraceRoute Analysis</h1>
      </div>
      <div>
      data ? (
        <>
           <div>
      data ? (
        <>
          <Map_test
            google_list=data.ids.array_google \\ error at this line
          />
        </>
      ) : (
        "Loading..."
      )
    </div>
        </>
      ) : (
        "Loading..."
      )
    </div>
     
      <div id="myData"></div>
      <script></script>
    </div>
  );
;

export default App;

您好,我在网上搜索了多个资源,但我认为这是一个相当复杂的 JSON 文件,我正在尝试阅读。即使我描述了正确的数据类型,它也无法获取数据并抛出以下错误。

TypeError: Cannot read properties of undefined (reading 'array_google')

非常感谢您对此提供一点帮助。

【问题讨论】:

【参考方案1】:

该错误表示无法读取属性array_google,因为未设置data.ids

如果data.ids 可能未定义,则应将其定义为可选。

export type ResponseData = 
  ids?: iData;
; 

【讨论】:

以上是关于TypeError:无法读取从带有已定义模板的 JSON 文件中读取的未定义属性(读取“array_google”)的主要内容,如果未能解决你的问题,请参考以下文章

Vue:未捕获(承诺中)TypeError:无法读取未定义的属性'_c'

TypeError:无法读取未定义的属性“rocket_name”——即使它已定义

webpack TypeError:无法读取未定义的属性“已解决”

带有可选路径参数的简单 React 路由器给出“TypeError:无法读取未定义的属性“过滤器”

[Vue 警告]:渲染错误:“TypeError:无法读取未定义的属性 'NomeStr'”

TypeError:无法读取未定义的属性(读取“国家”)