关于python插件,调用WebAPi时需要拼接json,通过字典转为json字符串原创
6人赞赏了该文章
791次浏览
未经作者许可,禁止转载编辑于2023年05月25日 11:04:01
对于熟悉python的大佬是了解python的字典的,一般来说,通用的数据类型,字典和json的区别只有引号的差异和布尔类型的首字母大写的区别。
json字符串的拼接,python中常用的格式化方法中,如果字符串包含"{"就会导致格式化失败。%s的方法呢太多又会导致拼接的时候不清晰。相对而言直接用+ 运算符有时候也是一个不错的方法。
下面是正题:
如图所示,第一个红框内的功能可以将dict转为json格式的字符串。
第二个红框内为一个字典,里面包含了一个列表推导式生成的字典列表。如果有变量的话直接写变量名即可,不熟悉的可以了解一下python的字典。
然后通过一个showErrMessagebox显示出来。下面上结果:
说了这么多,第一步把这个函数粘进去,第二步定义一个变量 = 一个json字符串。注意这里需要把布尔类型的内容替换成python里面的,比如json字符串里面是true,需要替换成True。第三步把利用这个函数获取字符串。
最简单的就是 jsonstr = dumps({这里是你替换了布尔类型之后的json字符串})
好了就这么多了,如果有关于python插件的好想法还会发布出来的。
### 新发现的问题
目前的问题,这里面的dict 是无序的,而webapi 里面的json 要求是有序的。这种方法的好处在于结构清晰。相对于其他的方式。后期维护起来也不需要在一大堆的json 字符串里面去找了。
另一种方法的示例代码
# 生成领料单
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))
赞 6
6人点赞
还没有人点赞,快来当第一个点赞的人吧!
打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!
推荐阅读
您的鼓励与嘉奖将成为创作者们前进的动力,如果觉得本文还不错,可以给予作者创作打赏哦!
请选择打赏金币数 *
10金币20金币30金币40金币50金币60金币
可用金币: 0