关于python插件,调用WebAPi时需要拼接json,通过字典转为json字符串

栏目:云星空知识作者:金蝶来源:金蝶云社区发布:2024-09-16浏览:1

关于python插件,调用WebAPi时需要拼接json,通过字典转为json字符串

       对于熟悉python的大佬是了解python的字典的,一般来说,通用的数据类型,字典和json的区别只有引号的差异和布尔类型的首字母大写的区别。

        json字符串的拼接,python中常用的格式化方法中,如果字符串包含"{"就会导致格式化失败。%s的方法呢太多又会导致拼接的时候不清晰。相对而言直接用+ 运算符有时候也是一个不错的方法。


下面是正题:

image.webp

        如图所示,第一个红框内的功能可以将dict转为json格式的字符串。

第二个红框内为一个字典,里面包含了一个列表推导式生成的字典列表。如果有变量的话直接写变量名即可,不熟悉的可以了解一下python的字典。

        然后通过一个showErrMessagebox显示出来。下面上结果:

image.webp

        说了这么多,第一步把这个函数粘进去,第二步定义一个变量 = 一个json字符串。注意这里需要把布尔类型的内容替换成python里面的,比如json字符串里面是true,需要替换成True。第三步把利用这个函数获取字符串。

最简单的就是  jsonstr = dumps({这里是你替换了布尔类型之后的json字符串})


好了就这么多了,如果有关于python插件的好想法还会发布出来的。


###   新发现的问题

目前的问题,这里面的dict 是无序的,而webapi 里面的json 要求是有序的。这种方法的好处在于结构清晰。相对于其他的方式。后期维护起来也不需要在一大堆的json 字符串里面去找了。

image.webp
另一种方法的示例代码

        # 生成领料单
        josnStr = '''
{
    "NeedUpDateFields": [],
    "NeedReturnFields": [],
    "IsDeleteEntry": "true",
    "SubSystemId": "",
    "IsVerifyBaseDataField": "false",
    "IsEntryBatchFill": "true",
    "ValidateFlag": "true",
    "NumberSearch": "true",
    "IsAutoAdjustField": "false",
    "InterationFlags": "",
    "IgnoreInterationFlag": "",
    "IsControlPrecision": "false",
    "ValidateRepeatJson": "false",
    "Model": {
        "FID": 0,
        "FBillType": {
            "FNUMBER": ""
        },
        "FDate": "1900-01-01",
        "FStockId0": {
            "FNumber": ""
        },
        "FStockOrgId": {
            "FNumber": ""
        },
        "FWorkShopId": {
            "FNumber": ""
        },
        "FOwnerTypeId0": "",
        "FOwnerId0": {
            "FNumber": ""
        },
        "FPickerId": {},
        "FSTOCKERID": {
            "FNAME": ""
        },
        "FDescription": "",
        "FCurrId": {
            "FNumber": ""
        },
        "FIsCrossTrade": "false",
        "FVmiBusiness": "false",
        "FScanBox": "",
        "FSourceType": "",
        "FIsOwnerTInclOrg": "false",
        "FEntity": [
 
                ]
           
       
    }
}
'''
        entryJsonStr = '''          
        {
                "FEntryID": 0,
                "FParentMaterialId": {
                    "FNumber": ""
                },
                "FBaseStockActualQty": 0,
                "FConsome": "",
                "FFPMBillNo": "",
                "FOptQueue": "",
                "FReserveType": 1,
                "FMaterialId": {
                    "FNumber": ""
                },
                "FAuxPropId": {
                    "FAUXPROPID__FF100001": {
                        "FNumber": ""
                    },
                    "FAUXPROPID__FF100002": ""
                },
                "FUnitID": {
                    "FNumber": ""
                },
                "FAppQty": 0,
                "FActualQty": 0,
                "FSecUnitId": {
                    "FNumber": ""
                },
                "FSecActualQty": 0,
                "FEntryVmiBusiness": "false",
                "FStockId": {
                    "FNumber": ""
                },
                "FOptPlanBillNo": "",
                "FOptPlanBillId": 0,
                "FStockLocId": {},
                "FWorkCenterId": {
                    "FNUMBER": ""
                },
                "FLot": {
                    "FNumber": ""
                },
                "FOptDetailId": 0,
                "FProcessId": {
                    "FNumber": ""
                },
                "FCobyBomEntryID": 0,
                "FBomId": {
                    "FNumber": ""
                },
                "FGroupRow": "",
                "FSrcPickEntryId": 0,
                "FStockStatusId": {
                    "FNumber": "KCZT01_SYS"
                },
                "FSrcBusinessType": "",
                "FQueryStockUpdate": "",
                "FTransRetBillNo": "",
                "FTransRetFormId": "",
                "FTransRetId": 0,
                "FSendRowId": "",
                "FTransRetEntryId": 0,
                "FTransRetEntrySeq": 0,
                "FCheckReturnMtrl": "false",
                "FPlanEntryID": 0,
                "FEntrtyMemo": "",
                "FIsOverLegalOrg": "false",
                "FMtoNo": "",
                "FProjectNo": "",
                "FMoBillNo": "",
                "FMoEntryId": 0,
                "FPPBomEntryId": 0,
                "FOperId": 0,
                "FOwnerTypeId": "BD_OwnerOrg",
                "FStockUnitId": {
                    "FNumber": ""
                },
                "FStockAppQty": 0,
                "FStockActualQty": 0,
                "FStockAllowOverQty": 0,
                "FSecAllowOverQty": 0,
                "FMoId": 0,
                "FMoEntrySeq": 0,
                "FAllowOverQty": 0,
                "FPPBomBillNo": "",
                "FBaseUnitId": {
                    "FNumber": ""
                },
                "FBaseAppQty": 0,
                "FBaseActualQty": 0,
                "FBaseAllowOverQty": 0,
                "FEntryWorkShopId": {
                    "FNumber": ""
                },
                "FKeeperTypeId": "",
                "FKeeperId": {
                    "FNumber": ""
                },
                "FOwnerId": {
                    "FNumber": ""
                },
                "FSrcBillType": "",
                "FSrcBillNo": "",
                "FPrice": 0,
                "FEntrySrcInterId": 0,
                "FAmount": 0,
                "FEntrySrcEnteryId": 0,
                "FEntrySrcEntrySeq": 0,
                "FParentOwnerTypeId": "",
                "FParentOwnerId": {
                    "FNumber": ""
                },
                "FSRCBIZBILLTYPE": {
                    "FNAME": ""
                },
                "FSRCBIZBILLNO": "",
                "FSRCBIZINTERID": 0,
                "FSRCBIZENTRYID": 0,
                "FSRCBIZENTRYSEQ": 0,
                "FPickingStatus": 0,
                "FEntity_Link":[{
                "FEntity_Link_FFlowId":"",
                "FEntity_Link_FFlowLineId":"",
                "FEntity_Link_FRuleId":"",
                "FEntity_Link_FSTableName":"",
                "FEntity_Link_FSBillId":0,
                "FEntity_Link_FSId":0,
                "FEntity_Link_FBaseActualQtyOld":0
                }
            ],
            "FBFLOWID" : {"FID": ""}
            }
'''
       
        insertData = JObject.Parse(josnStr)
        insertData.Model.FBillType.FNUMBER = "SCLLD01_SYS"
        insertData.Model.FDate = DateTime.Now.ToString("yyyy-MM-dd 00:00:00")
        insertData.Model.FStockOrgId.FNumber = "100"
        insertData.Model.FOwnerTypeId0 = "BD_OwnerOrg"

        sql = """EXEC GET_Pi %s""" % (billId)
        dr = DBUtils.ExecuteDataSet(this.Context, sql).Tables[0].Rows
        if len(dr) > 0:
            for i in range(len(dr)):
                insertEntryData = JObject.Parse(entryJsonStr)

                insertEntryData.FMaterialId.FNumber = str(dr[i]["0"])
                insertEntryData.FStockId.FNumber = "CK001"
                insertEntryData.FStockStatusId.FNumber = "KCZT01_SYS"
                insertEntryData.FEntryWorkShopId.FNumber = str(dr[i]["9"])
                insertEntryData.FMoBillNo = str(str(dr[i]["4"]).split("/")[0])
                insertEntryData.FMoEntryId = int(dr[i]["6"])
                insertEntryData.FPPBomBillNo = str(dr[i]["5"])
                insertEntryData.FPPBomEntryId = 0 #待定
                insertEntryData.FOwnerTypeId = "BD_OwnerOrg"
                insertEntryData.FAppQty = float(dr[i]["2"])
                insertEntryData.fbaseappqty = float(dr[i]["2"])
                insertEntryData.FStockAppQty = float(dr[i]["2"])
                insertEntryData.FStockActualQty = float(dr[i]["2"])
                insertEntryData.FBaseStockActualQty = float(dr[i]["2"])
                insertEntryData.FStockFlag = 0
                insertEntryData.FOperId = 10
                insertEntryData.FRESERVETYPE = 1
                insertEntryData.FLot.FNumber = str(dr[i]["10"])
                insertEntryData.FAuxPropId.FAUXPROPID__FF100001.FNumber = ""
                insertEntryData.FGroupRow = "00505691-1bc5-8b12-11ec-8fa0b451dda8"
                insertEntryData.FMoId = int(dr[i]["7"])
                insertEntryData.FMoEntrySeq = int(str(dr[i]["4"]).split("/")[1])
                insertEntryData.FKeeperTypeId = "BD_KeeperOrg"
                insertEntryData.FKeeperId.FNumber = "100"
                insertEntryData.FOwnerId.FNumber = "100"
                insertEntryData.FUnitID.FNumber = str(dr[i]["3"])
                insertEntryData.FBaseUnitId.FNumber = str(dr[i]["3"])
                insertEntryData.FStockUnitId.FNumber = str(dr[i]["3"])
                insertEntryData.FActualQty = float(dr[i]["2"])
                insertEntryData.FBaseActualQty = float(dr[i]["2"])
                insertEntryData.FSecActualQty = 1
                insertEntryData.FSecUnitId.FNumber = "pi"
                insertEntryData.FSecActualQty = 1
                insertEntryData.FParentOwnerTypeId = "BD_OwnerOrg"
                insertEntryData.FParentOwnerId.FNumber = "100"
                insertEntryData.FParentMaterialId.FNumber = str(dr[i]["1"])
                insertEntryData.FSrcBillType = "PRD_PPBOM"
                insertEntryData.FSrcBillNo = str(dr[i]["5"])
                insertEntryData.FEntrySrcInterId = int(dr[i]["8"])
                insertEntryData.FEntrySrcEntryId = 0 #待定
                insertEntryData.FEntrySrcEntrySeq = 0 #待定
                insertEntryData.FEntity_Link[0].FEntity_Link_FFlowId = "81119477-4778-4d0b-94b9-1c43a1c1f768"
                insertEntryData.FEntity_Link[0].FEntity_Link_FFlowLineId = 5
                insertEntryData.FEntity_Link[0].FEntity_Link_FRuleId = "PRD_PPBOM2PICKMTRL_NORMAL"
                insertEntryData.FEntity_Link[0].FEntity_Link_FSTableName = "T_PRD_PPBOMENTRY"
                insertEntryData.FEntity_Link[0].FEntity_Link_FSBillId = int(dr[i]["8"])
                insertEntryData.FEntity_Link[0].FEntity_Link_FSId = 0 #待定
                insertEntryData.FEntity_Link[0].FEntity_Link_FBaseActualQtyOld = float(dr[i]["2"])
                insertEntryData.FBFLOWID.FID = "81119477-4778-4d0b-94b9-1c43a1c1f768"
                insertData.Model.FEntity.Add(insertEntryData)
            formId = "PRD_PickMtrl"
            raise Exception(str(insertData))



目前的问题,这里面的dict 是无序的,而webapi 里面的json 要求是有序的
image.webp
所以下面有了新的解决方案。
个人人为比 %s 清晰不少
示例代码

        # 生成领料单
        josnStr = '''
{
    "NeedUpDateFields": [],
    "NeedReturnFields": [],
    "IsDeleteEntry": "true",
    "SubSystemId": "",
    "IsVerifyBaseDataField": "false",
    "IsEntryBatchFill": "true",
    "ValidateFlag": "true",
    "NumberSearch": "true",
    "IsAutoAdjustField": "false",
    "InterationFlags": "",
    "IgnoreInterationFlag": "",
    "IsControlPrecision": "false",
    "ValidateRepeatJson": "false",
    "Model": {
        "FID": 0,
        "FBillType": {
            "FNUMBER": ""
        },
        "FDate": "1900-01-01",
        "FStockId0": {
            "FNumber": ""
        },
        "FStockOrgId": {
            "FNumber": ""
        },
        "FWorkShopId": {
            "FNumber": ""
        },
        "FOwnerTypeId0": "",
        "FOwnerId0": {
            "FNumber": ""
        },
        "FPickerId": {},
        "FSTOCKERID": {
            "FNAME": ""
        },
        "FDescription": "",
        "FCurrId": {
            "FNumber": ""
        },
        "FIsCrossTrade": "false",
        "FVmiBusiness": "false",
        "FScanBox": "",
        "FSourceType": "",
        "FIsOwnerTInclOrg": "false",
        "FEntity": [
 
                ]
           
       
    }
}
'''
        entryJsonStr = '''          
        {
                "FEntryID": 0,
                "FParentMaterialId": {
                    "FNumber": ""
                },
                "FBaseStockActualQty": 0,
                "FConsome": "",
                "FFPMBillNo": "",
                "FOptQueue": "",
                "FReserveType": 1,
                "FMaterialId": {
                    "FNumber": ""
                },
                "FAuxPropId": {
                    "FAUXPROPID__FF100001": {
                        "FNumber": ""
                    },
                    "FAUXPROPID__FF100002": ""
                },
                "FUnitID": {
                    "FNumber": ""
                },
                "FAppQty": 0,
                "FActualQty": 0,
                "FSecUnitId": {
                    "FNumber": ""
                },
                "FSecActualQty": 0,
                "FEntryVmiBusiness": "false",
                "FStockId": {
                    "FNumber": ""
                },
                "FOptPlanBillNo": "",
                "FOptPlanBillId": 0,
                "FStockLocId": {},
                "FWorkCenterId": {
                    "FNUMBER": ""
                },
                "FLot": {
                    "FNumber": ""
                },
                "FOptDetailId": 0,
                "FProcessId": {
                    "FNumber": ""
                },
                "FCobyBomEntryID": 0,
                "FBomId": {
                    "FNumber": ""
                },
                "FGroupRow": "",
                "FSrcPickEntryId": 0,
                "FStockStatusId": {
                    "FNumber": "KCZT01_SYS"
                },
                "FSrcBusinessType": "",
                "FQueryStockUpdate": "",
                "FTransRetBillNo": "",
                "FTransRetFormId": "",
                "FTransRetId": 0,
                "FSendRowId": "",
                "FTransRetEntryId": 0,
                "FTransRetEntrySeq": 0,
                "FCheckReturnMtrl": "false",
                "FPlanEntryID": 0,
                "FEntrtyMemo": "",
                "FIsOverLegalOrg": "false",
                "FMtoNo": "",
                "FProjectNo": "",
                "FMoBillNo": "",
                "FMoEntryId": 0,
                "FPPBomEntryId": 0,
                "FOperId": 0,
                "FOwnerTypeId": "BD_OwnerOrg",
                "FStockUnitId": {
                    "FNumber": ""
                },
                "FStockAppQty": 0,
                "FStockActualQty": 0,
                "FStockAllowOverQty": 0,
                "FSecAllowOverQty": 0,
                "FMoId": 0,
                "FMoEntrySeq": 0,
                "FAllowOverQty": 0,
                "FPPBomBillNo": "",
                "FBaseUnitId": {
                    "FNumber": ""
                },
                "FBaseAppQty": 0,
                "FBaseActualQty": 0,
                "FBaseAllowOverQty": 0,
                "FEntryWorkShopId": {
                    "FNumber": ""
                },
                "FKeeperTypeId": "",
                "FKeeperId": {
                    "FNumber": ""
                },
                "FOwnerId": {
                    "FNumber": ""
                },
                "FSrcBillType": "",
                "FSrcBillNo": "",
                "FPrice": 0,
                "FEntrySrcInterId": 0,
                "FAmount": 0,
                "FEntrySrcEnteryId": 0,
  &n

关于python插件,调用WebAPi时需要拼接json,通过字典转为json字符串

对于熟悉python的大佬是了解python的字典的,一般来说,通用的数据类型,字典和json的区别只有引号的差异和布尔类型的首字母大写...
点击下载文档
确认删除?