我从第三方收到JSON,需要有条件地解析数量......根据订单项的使用类型,“ReplacementCount”或“ServiceCount”将需要变为“quantity”,并删除或忽略其他。这两个'lineitemfieldname'都不是> 0的情况,它总是一个或另一个。
我正在使用它的第一个if语句,但从不进入第二个...我很确定我正在为JSON对象/值处理if语句错误,但我不确定如何解决。
这是我的样本JSON:
{"recordtype":"salesorder","item":
[{"InventoryManagementKey":"20001","InvoiceDay":"9/10/2015","ReplacementAmount":0.0000,"ReplacementCount":500,"ServiceAmount":0.0000,"ServiceCount":0}]}
这是处理JSON的服务器端脚本的片段:
for(var lineitemfieldname in lineitemobject)
{
var lineitemfieldvalue = lineitemobject[lineitemfieldname];
if(lineitemfieldname == 'ServiceCount' && lineitemfieldvalue != 0)
{
if(lineitemfieldname == 'InventoryManagementKey')
{
lineitemfieldname = 'item';
}
if(lineitemfieldname == 'ServiceCount')
{
lineitemfieldname = 'quantity';
}
delete 'ServiceAmount';
delete 'ReplacementAmount';
delete 'ReplacementCount';
delete 'invoiceDay';
record.setCurrentLineItemValue('item',lineitemfieldname,lineitemfieldvalue);
}
}
这将根据“ReplacementAmount”更新你的json
var lineitemobject = JSON.parse('{"recordtype":"salesorder","item":[{"InventoryManagementKey":"20001","InvoiceDay":"9/10/2015","ReplacementAmount":0.0000,"ReplacementCount":500,"ServiceAmount":0.0000,"ServiceCount":0}]}');
if(lineitemobject.item[0]['ReplacementAmount'] > 0) {
lineitemobject.item[0]['quantity'] = lineitemobject.item[0]['ReplacementAmount'];
delete lineitemobject.item[0]['ReplacementAmount'];
} else {
lineitemobject.item[0]['quantity'] = lineitemobject.item[0]['ServiceCount'];
delete lineitemobject.item[0]['ServiceCount'];
}
这里只有lineitemobject JavaScript对象值更改,而不是JSON字符串。
由于rajuGT的指导,我能够解决这个问题。对于任何偶然发现这一点的人,以下是我的决议摘要:
var currentValue = 0; //Global
for (var itemobject in value){
record.selectNewLineItem('item');
var lineitemobject = value[itemobject];
for(var lineitemfieldname in lineitemobject){
var lineitemfieldvalue = lineitemobject[lineitemfieldname];
if(lineitemfieldname == 'ReplacementCount'){
if(lineitemfieldvalue != 0){
lineitemfieldname = 'quantity';
currentValue = lineitemfieldvalue;
}
delete 'ServiceCount';
}
else if (lineitemfieldname == 'ServiceCount'){
if(lineitemfieldvalue != 0){
lineitemfieldname = 'quantity';
currentValue = lineitemfieldvalue;
}
delete 'ReplacementCount';
}
if(lineitemfieldname == 'InventoryManagementKey'){
lineitemfieldname = 'item';
}
record.setCurrentLineItemValue('item',lineitemfieldname,lineitemfieldvalue);
record.setCurrentLineItemValue('item','price','9')
}
record.commitLineItem('item');
}
验证JSON Schema Draft-07,JSON现在支持条件数据表示的if...then...else
关键字。
{
"type": "integer",
"minimum": 1,
"maximum": 1000,
"if": { "minimum": 100 },
"then": { "multipleOf": 100 },
"else": {
"if": { "minimum": 10 },
"then": { "multipleOf": 10 }
}
}