【问题标题】:JSON If StatementJSON If 语句
【发布时间】:2015-12-14 18:24:08
【问题描述】:

我从第 3 方接收 JSON,需要有条件地解析数量...根据订单项的使用类型,“ReplacementCount”或“ServiceCount”将需要变为“数量”,并删除或忽略另一个。 '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);
                                }
}

【问题讨论】:

  • 最后,您要访问哪些字段?预期的输出是什么?
  • 如果 'ReplacementCount' 的值 > 0,则标签 'ReplacementCount' 应更改为 'quantity' 这可以移动到 if/else,或者保留第二个 if... 但是如果 'ReplacementCount' = 0,'ServiceCount' 应改为 'quantity'
  • 立即查看更新的
  • SyntaxError: Unexpected token: o (Create Sales Order Restlet.js$1524488#48)

标签: javascript json rest netsuite suitescript


【解决方案1】:

验证 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 }
    }
}

【讨论】:

    【解决方案2】:

    这将根据“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 字符串。

    【讨论】:

    • 试图将其放入我的函数中,但在解析时遇到了一些问题……几乎可以肯定这是用户错误。 JSON 发送到服务器,服务器将 JSON 收集为“datain”,因此 datain.recordtype 用于访问 JSON 对象 > {"recordtype":"salesorder"}。我想这意味着 datain.item 是我需要解析的。我无法从您的 var lineitemobject = JSON.parse() 连接到服务器接收数据和需要解析的方式。
    • jsfiddle 中的 if-else 太多。我只是复制了我附加并在 firebug 中执行的代码。它按照您的 cmets 工作。如果 JSON 字符串“keys”是动态的,那我就帮不上忙了。
    • 根据您的代码,我认为我现在走在正确的轨道上。支持您的回答,谢谢 rajuGT!
    【解决方案3】:

    感谢 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');
    }
    

    【讨论】:

      猜你喜欢
      • 2019-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-06
      • 1970-01-01
      • 1970-01-01
      • 2016-03-26
      • 1970-01-01
      相关资源
      最近更新 更多