0
我正在生成一系列嵌套对象(在元素的'failReasons'和'照片'下)的对象数组 - 然后我想将结果数组作为JSON到一个Web API,它将期望一个对象列表,以及嵌套的对象列表。第一部分工作 - 数组接收对象列表并可以解析它们,但是,在将数组转换为JSON时,嵌套数组为空。使用嵌套对象数组的JSON.Stringify数组TypeScript/JS
这是我产生了数组: 这里是个什么样子,当我字符串化是这样的:
{"capeNo":"ABCD1234","insDate":"2016-11-10 15:03:18","inspector":"User.Name","inspectionResult":"Pass","comments":"","site":"Site Name","dismCompleteDate":"","failReasons":[],"photos":[]}
正如你所看到的,failReasons,它有它的数组中的6个对象被字符串化之前,现在只是一个空阵列。
我用下面的代码来生成数组:
接口:
export interface inspectionUpload {
capeNo: string;
insDate: string;
inspector: string;
inspectionResult: string;
comments: string;
site: string;
dismCompleteDate;
failReasons: Array<Object>;
photos: Array<Object>;
}
export interface inspectionFailures {
failCategory: string;
failReason: string;
resolution: string;
inspectionId: string;
}
export interface inspectionPhotos {
base64: string;
}
而这种填充阵列:
this.sql.query('SELECT rowid,* FROM InspectionResults_tbl').then((res) => {
var arr = []
for (var i = 0; i < res.res.rows.length; i++) {
var item = res.res.rows.item(i);
var header: inspectionUpload = {
capeNo: item.capeNo,
insDate: item.inspectionDT,
inspector: item.inspectedBy,
inspectionResult: item.result,
comments: item.comment,
site: this.SharedService.site,
dismCompleteDate: item.dismantleDate,
failReasons: <inspectionFailures[]> [],
photos: <inspectionPhotos[]> []
}
if (item.result == 'Fail') {
console.log(item);
this.sql.query('SELECT * FROM InspectionFailures_tbl WHERE inspectionId = ?', [item.rowid]).then((res) => {
for (var i = 0; i < res.res.rows.length; i++) {
var item = res.res.rows.item(i);
header.failReasons.push({
failCategory: item.failCategory,
failReason: item.failreason,
resolution: item.resolution,
FRId: item.FRId
})
}
})
}
this.sql.query('SELECT * FROM InspectionPhotos_tbl WHERE inspectionId = ?', [item.rowid]).then((res) => {
for (var i = 0; i < res.res.rows.length; i++) {
var item = res.res.rows.item(i);
header.photos.push({
base64: item.base64
})
}
})
arr.push(header);
if ((i + 1) == res.res.rows.length) upload(arr)
}
})
最后,以字符串化它:
function upload(a) {
console.log(a);
console.log(JSON.stringify(a));
}
帮助将不胜感激:)
在外部查询的回调中执行的那些查询与该查询的异步性相同。这些查询完成后,数组将填充,但在外部回调完成后会发生这种情况。 – Pointy
@Pointy,如果我遵循,你是说在我的失败原因和照片数组填充之前调用json.stringify?我曾经考虑过这个问题,但是在我将它串起来的同时,我调用了数组的console.log,并且当时可以看到数据(根据屏幕截图?)或者我误解了它们吗? – fl3rgle
顶级对象'已经登录了,在你的图像的最上面的框架中,它旁边是否有一个小的蓝色'i'? –