从文件中获取 json 数据时遇到问题
Having trouble getting json data from file
我正在读取 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"
}
]
}
}
我已经设法弄清楚如何通过创建一组预期的循环天数来获取 "day" 数据。这些天我尝试做的所有事情都在循环,否则都失败了。我收到错误数据不是数组或字符串。
console.log 现在打印出正确的数据,但我不知道如何获取子字段,它总是告诉我数据[天]。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;
}
}
我需要找到一种能够遍历数据的方法,这样我就不需要知道日期、sample_type 和存在的研究。
更新第一个答案:
const data = accessioningAnalyticsDataNC.day_ordered_data;
for(let i of data){
}
这个returns:
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.```
就我而言,可能发生的情况是您正在存储日期数组,而这些正是您所引用的内容。
这就是您想要得到的:
day_ordered_data > 天 > day_num
但这是您 JSON 的结构:
day_ordered_data > 天数组“1” > day > day_num
您可以尝试这样的操作:console.log(data[1][day]).
希望能帮到你
感谢@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);
}
}
}
我正在读取 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"
}
]
}
}
我已经设法弄清楚如何通过创建一组预期的循环天数来获取 "day" 数据。这些天我尝试做的所有事情都在循环,否则都失败了。我收到错误数据不是数组或字符串。
console.log 现在打印出正确的数据,但我不知道如何获取子字段,它总是告诉我数据[天]。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;
}
}
我需要找到一种能够遍历数据的方法,这样我就不需要知道日期、sample_type 和存在的研究。
更新第一个答案:
const data = accessioningAnalyticsDataNC.day_ordered_data;
for(let i of data){
}
这个returns:
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.```
就我而言,可能发生的情况是您正在存储日期数组,而这些正是您所引用的内容。
这就是您想要得到的: day_ordered_data > 天 > day_num
但这是您 JSON 的结构: day_ordered_data > 天数组“1” > day > day_num
您可以尝试这样的操作:console.log(data[1][day]).
希望能帮到你
感谢@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);
}
}
}