【问题标题】:Having trouble getting json data from file无法从文件中获取 json 数据
【发布时间】:2019-12-16 16:32:10
【问题描述】:

我正在读取一个 json 文件,但我似乎无法找到一种方法来迭代或循环数据并获取子项。

我尝试了 for 循环、.keys()、foreach 以及我发现的其他关于如何循环数据的示例。

这里是一个json的例子。我修改了一些隐私数据

{
    "day_ordered_data": {
        "1": [
            {
                "study": "1234567890",
                "barcode_uploaded": "1234567890",
                "barcode_scanned": "1234567890",
                "receipt_date": "1234567890",
                "day_num": 1,
                "sample_type": "Blood"
            },
            {
                "study": "0987654321",
                "barcode_uploaded": "0987654321",
                "barcode_scanned": "0987654321",
                "receipt_date": "0987654321",
                "day_num": 1,
                "sample_type": "Blood"
            },
            {
                "study": "6789012345",
                "barcode_uploaded": "6789012345",
                "barcode_scanned": "6789012345",
                "receipt_date": "6789012345",
                "day_num": 1,
                "sample_type": "WB for DNA"
            }
        ]
    }
}

我已经设法通过创建一组预期天数来循环获取“天”数据。我试图在几天内循环执行的所有操作都失败了。我收到错误数据不是数组或字符串。

console.log 现在打印出正确的数据,但我不知道如何获取它总是告诉我 data[day].day_num 未定义的子字段。

import { Injectable } from '@angular/core';
import accessioningAnalyticsDataNC from '../../assets/data/Accessioning-Analytics-Data.json';

@Injectable({
    providedIn: 'root'
})

export class AnalyticsAccessioningDataService {
    private dataMap = new Map();
    days30: string[];

    constructor() {
        this.days30 = ['29', '28', '27', '26', '25', '24', '23', '22',
            '21', '20', '19', '18', '17', '16', '15', '14', '13', '12', '11',
            '10', '9', '8', '7', '6', '5', '4', '3', '2', '1', '0'];
    }

    public getData() {
        console.log('AnalyticsAccessioningDataService: getData');

        const data = accessioningAnalyticsDataNC.day_ordered_data;

        for (const day of this.days30) {
            console.log(data[day]);
        }
    }

    public getDataByType(type: string) {
        let data: any;

        if (this.dataMap.has(type)) {
            data = this.dataMap.get(type);
        }

        return data;
    }
}

我需要找到一种能够循环数据的方法,这样我就不需要知道日期、样本类型以及存在的研究。

更新到第一个答案:

const data = accessioningAnalyticsDataNC.day_ordered_data;

for(let i of data){
}

这会返回:

ERROR in src/app/services/analytics-accessioning-data.service.ts(25,22): error TS2495: Type '{ "1": { "study": string; "barcode_uploaded": string; "barcode_scanned": string; "receipt_date": string;
"day_num": number; "sample_type": string; }[]; ...' is not an array type or a string type.```

【问题讨论】:

    标签: json typescript angular8


    【解决方案1】:

    就我而言,可能发生的情况是您正在存储天数数组,而这些就是您所引用的。

    这就是你想要得到的: day_ordered_data > day > day_num

    但这是您的 JSON 的结构: day_ordered_data > 天数数组“1” > day > day_num

    你可以试试这样的:console.log(data[1][day])。

    希望能帮到你。

    【讨论】:

    • 谢谢这让我更接近但只返回第一个项目。我需要弄清楚如何循环遍历它。
    【解决方案2】:

    感谢@Pipimi 为我指明了正确的方向。 改变了

    const data = accessioningAnalyticsDataNC.day_ordered_data;
    

    到

    const data = accessioningAnalyticsDataNC['day_ordered_data'];
    

    在for循环中添加

    if (data[day] !== undefined) {
        console.log(data[day]);
        for (const i of data[day]) {
            this.dayItem = i;
            console.log(day + ' ' + this.dayItem.barcode_scanned + ' ' + this.dayItem.day_num + ' ' + this.dayItem.sample_type);
        }
    }
    

    工作代码。

    const data = accessioningAnalyticsDataNC['day_ordered_data'];
    console.log(data);
    
    for (const day of this.days30) {
        console.log(day);
        if (data[day] !== undefined) {
            console.log(data[day]);
            for (const i of data[day]) {
                this.dayItem = i;
                console.log(day + ' ' + this.dayItem.barcode_scanned + ' ' + this.dayItem.day_num + ' ' + this.dayItem.sample_type);
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多