一、问题背景
在影刀搭建流程中有时会需要将字符串转为json格式以备后续使用,影刀虽然提供了文本转json的指令,但是有一些隐藏的注意事项,下面一起看看吧。
二、案例及解决思路
数据如下
{'customerBiddingNo': 'HVN1','successfulBidder': '','successfulAmount': 22600.0,'projectId': 1278,'result': 1,'processItems': [{'dateTime': '2024-01-29 09:36:53', 'unitPrice': 127.0},{'dateTime': '2024-01-29 10:01:25', 'unitPrice': 127.0},{'dateTime': '2024-01-29 11:28:06', 'unitPrice': 113.0}]}
方式1:使用指令实现
直接使用转换为json对象会报错: Expecting property name enclosed in double quotes: line 1 column 2 (char 1)

这个错误信息是JSON解析器返回的错误消息,表示在JSON文档的第一行第二列(即第一个字符)发现了一个问题。具体来说,它指出JSON解析器期望在该位置找到一个属性名,并且该属性名应该用双引号括起来。
这个错误通常出现在JSON文档中使用了单引号或者没有使用双引号括起属性名的情况下。
转换成json对象底层的指令底层逻辑是用json的loads函数去实现
json.loads:将json字符串转换为字典类型,返回python对象 [str→dict]
而我们当前字符串并不符合json格式,所以要先将所有的单引号替换为双引号,再使用转换成json对象指令就可以了,得到的结果实际是一个字典类型

方式2:使用代码实现
这个数据实际是一个字典,python中有专门针对字典转字符串的函数
json.dumps:将python中的字典类型转换为字符串类型,返回json字符串 [dict→str]
可以将代码写在python模块中,也可以直接在流程中使用插入代码段指令,二者选其一即可
1)写在python模块中
import json
def main(args):
# 定义一个包含单引号的字典
data = {
'customerBiddingNo': 'HVN1',
'successfulBidder': '',
'successfulAmount': 22600.0,
'projectId': 1278,
'result': 1,
'processItems': [
{'dateTime': '2024-01-29 09:36:53', 'unitPrice': 127.0},
{'dateTime': '2024-01-29 10:01:25', 'unitPrice': 127.0},
{'dateTime': '2024-01-29 11:28:06', 'unitPrice': 113.0}
]
}
# 将字典转换为 JSON 格式的字符串
json_string = json.dumps(data)
return(json_string)
pass流程中调用该模块即可

2)写在插入代码段中
import json
# 定义一个包含单引号的字典
data = {
'customerBiddingNo': 'HVN1',
'successfulBidder': '',
'successfulAmount': 22600.0,
'projectId': 1278,
'result': 1,
'processItems': [
{'dateTime': '2024-01-29 09:36:53', 'unitPrice': 127.0},
{'dateTime': '2024-01-29 10:01:25', 'unitPrice': 127.0},
{'dateTime': '2024-01-29 11:28:06', 'unitPrice': 113.0}
]
}
# 将字典转换为 JSON 格式的字符串
json_string = json.dumps(data)注意打印的时候需要点亮python模式
