无法显示嵌套 JSON 文件/模型的数据

Posted

技术标签:

【中文标题】无法显示嵌套 JSON 文件/模型的数据【英文标题】:Unable to show data of nested JSON file/model 【发布时间】:2018-07-05 07:49:17 【问题描述】:

我目前有一个本地 JSON 文件,其中包含许多属性的数据。想法是将此 JSON 文件加载到我的应用程序中,并将其显示到一个列表中,并带有对其进行排序的选项(也就是重新排列数据)。

这是我的 property.model.ts

export class Property 
    ID: number;
    description: string;
    price: string;
    agreementType: string;
    streetName: string;
    houseNumber: number;
    postCode: string;
    place: string;
    image: Image[];
    status: string;
    constructionYear: number;
    areaSize: number;
    numberOfRooms: number;
    numberOfBedrooms: number;
    garageType: string;
    garageCapacity: number;


export class Image 
    ID: number;
    base64: string;

这是我的 json 文件的样子:

[
  
    "ID": 1,
    "description": "Lorem ipsum...",
    "price": "€800,25",
    "agreementType": "unknown",
    "streetName": "street",
    "houseNumber": 55,
    "postCode": "postCode",
    "place": "place",
    "image": [
      
        "ID": 1,
        "base64": ""
      ,
      
        "ID": 2,
        "base64": ""
      ,
      
        "ID": 3,
        "base64": ""
      
    ],
    "status": "status",
    "constructionYear": 1999,
    "areaSize": 50,
    "numberOfRooms": 5,
    "numberOfBedrooms": 2,
    "garageType": "",
    "garageCapacity": 0
  ,
  
    //...
  
]

这是我的 property.service.ts

export class PropertyService 
    public propertyData: Observable<Property>;

    constructor(private http: HttpClient)     
        this.propertyData = this.observableJson();
    

    observableJson() : Observable<Property> 
        return this.http.get('/data/property.json')
            .map((res:Response) =>  res.json(); console.log(res.json()))
            .catch((error:any) => Observable.throw(error.json().error || 'Server error'));
    

稍后,我也希望能够在应用程序的其他地方使用我的服务,以(例如)向它添加属性对象或其他东西。虽然我不知道这是否可能。但是现在我只想能够以某种方式让我的 oberable 数组在属性组件中可用。目前,这似乎不起作用,因为当我在构造函数中使用 console.log(JSON.stringify(this.propertyData)); 时,出现以下错误:

JS: ERROR 错误: Uncaught (in promise): TypeError: Converting circular structure to JSON JS:TypeError:将循环结构转换为 JSON

现在,谷歌搜索告诉我这是因为它是一个嵌套的 JSON 对象,但经过多次尝试,我无法弄清楚如何解决这个问题。

提前感谢您的帮助。

【问题讨论】:

【参考方案1】:

Observable 属性内部可能有一些自我引用的东西,这会导致您看到的错误。你不想 JSON.stringify propertyData 这是一个 Observable,但你想对发出的 JSON 响应进行字符串化。有很多不同的方法可以做到这一点,这取决于您使用它的环境。例如:

this.propertyData.subscribe(data => JSON.stringify(data));
const data = JSON.stringify(await this.propertyData.toPromise());

【讨论】:

冒着听起来很愚蠢的风险——你会在哪里以及如何应用这个?我对 Nativescript 还很陌生,但仍在尝试掌握应用程序逻辑等。结合角度,这一切都需要哈哈:)。我确实尝试记录第一行代码,它返回 [object object]... 我不明白,因为你把它变成了一个字符串,不是吗? [object Object] 是大多数对象的字符串表示形式。您很可能会在组件代码中执行此操作,例如 ngOnInit this.propertyData.subscribe(data =&gt; this.data = data);。您还可以在模板中使用async 管道从可观察对象中获取数据。您可能根本不需要使用JSON.stringify 啊,我明白了,谢谢 - 我会调查一下。根本没有考虑过为此使用异步。至少现在我有一些东西可以尝试:)【参考方案2】:

试试这个 -

this.observableJson().subscribe(res => 
 this.propertyData = res;
 console.log(JSON.stringify(this.propertyData));
);

【讨论】:

这个的输出是“未定义”。 这是因为您在构造函数中记录了这个,但当时您的 http 调用处于未决状态。 仅记录值,您可以尝试更新代码。但要在此方法之外使用此数据,您可以使用“闭包”。

以上是关于无法显示嵌套 JSON 文件/模型的数据的主要内容,如果未能解决你的问题,请参考以下文章

取消嵌套嵌套 json 数据以显示在 Quicksight 中

我无法解析应用程序中 JSON 的嵌套类中的 mag 以及地点和时间,它们都将值显示为 null

显示从 Nodejs 到 EJS 的嵌套 JSON

无法让 ForEach 循环在 SwiftUI 中使用嵌套的 JSON 数据运行 [关闭]

echarts使用本地json文件无法显示地图

React - 无法显示路径存储在 json 文件中的 svg 图像