为什么我不能迭代一个 JSON 来返回带有 jquery 和 "for in" 的对象和数组字符串?



我从SAP ERP系统收到一个包含工单信息的JSON文件。这来自RESThttp端点。这个较小版本的示例显示为(每次数组大小都不同(。。

{
"SeqNo": [
"000000",
"000000"
],
"OpNo": [
"0100",
"0200"
],
"OpDesc": [
"ASSEMBLE, PER DBI & DRAWING",
"FINAL INSPECT PER DBI & DWG"
],
"WorkCent": [
"8000",
"7000"
],
"WorkCentText": [
"ASSEMBLY (SURFACE)",
"QC INSPECTIONS"
]
}

我需要运行此过程,并提取标头对象和每个数组项。我的总体意图是向机器操作员提供一个格式选择-

"SeqNo: 00000, OpNo:0100, OpDesc: ASSEMBLE, PER DBI & DRAWING, WorkCent: 8000, WorkCentText: ASSEMBLY (SURFACE)"
"SeqNo: 00000, OpNo:0200, OpDesc: FINAL INSPECT PER DBI & DWG, WorkCent: 7000, WorkCentText: QC INSPECTIONS"

这将出现在一个基于Bootstrap和JS构建的网页中。根据他们的选择,这将通过OPC路由器向中间件和SCADA发送工单数据。

使用jquery,我可以迭代并抓取对象"SeqNo"OpNo";,但是每个随后的数组都作为完整数组的字符串出现;000000000000";。因此,在原始jquery迭代中使用";对于";或";在";我返回每一个字符"S"e"q〃;,等我尝试过字符串和解析来更改JSON格式,但我无法提取所需的数据。

function checkId() {

var sapexport = {
"SeqNo": ["000000", "000000"],
"OpNo": ["0100", "0200"],
"OpDesc": ["ASSEMBLE, PER DBI & DRAWING", "FINAL INSPECT PER DBI & DWG"],
"WorkCent": ["8000", "7000"],
"WorkCentText": ["ASSEMBLY (SURFACE)", "QC INSPECTIONS"]
}

// JSON to string and back
var mystring = JSON.stringify(sapexport)
var mydata = JSON.parse(mystring)
$.each(mydata, function (index, value) {
//alert("Index = " + index + ", Array =  " + value);   // returns json array header names but full array
// So from the start of this jquery we iterate the JSON objects from SAP
// We now can show the full array values below, but still need to iterate individually
// but they are not objects they are arrays and jquery will not return

//still returns full string
$.each(mydata, function() {
var h = this;
alert(h.toString());
});

}) //initial jquery end
} //function checkid end

如果我可以返回所需的对象和数组单个值,那么将数据切碎以生成字符串将很容易。

在我发疯之前,任何帮助都将不胜感激。

如果我正确理解你的目标,下面是vanila js:的解决方案

const sapexport = {"SeqNo": ["000000", "000000"],"OpNo": ["0100", "0200"],"OpDesc": ["ASSEMBLE, PER DBI & DRAWING", "FINAL INSPECT PER DBI & DWG"],"WorkCent": ["8000", "7000"],"WorkCentText": ["ASSEMBLY (SURFACE)", "QC INSPECTIONS"]};


const groups = Object.entries(sapexport).reduce((acc, [key, values]) => {
values.forEach((value, index) => {
acc[index] ??= [];  
acc[index].push(`${key}: ${value}`);
});
return acc;
}, {});
const result = Object.values(groups).map((group) => group.join(', '));
console.log(result);
// [ "SeqNo: 000000, OpNo: 0100, OpDesc: ASSEMBLE, PER DBI & DRAWING, WorkCent: 8000, WorkCentText: ASSEMBLY (SURFACE)",
//   "SeqNo: 000000, OpNo: 0200, OpDesc: FINAL INSPECT PER DBI & DWG, WorkCent: 7000, WorkCentText: QC INSPECTIONS"]
.as-console-wrapper { max-height: 100% !important; top: 0 }

最新更新