如何在Python脚本中参数化JSON对象
我正在用Python编写一个测试,其中在参数中指定JSON sting,如下所示:如何在Python脚本中参数化JSON对象,python,json,Python,Json,我正在用Python编写一个测试,其中在参数中指定JSON sting,如下所示: json = '...[{"MemberOperand":{ "AttributeName":"TEST", "Comparison":"=", "Value":"Test"
json = '...[{"MemberOperand":{
"AttributeName":"TEST",
"Comparison":"=",
"Value":"Test"}
}]...'
在本例中,我的值为“Test”,但我希望使用多个值运行测试。你们能告诉我如何参数化“Value”的值吗?添加函数,该函数通过提供的值作为参数始终返回不同的json字符串:
def get_mock_json(value='Test'):
return '...[{"MemberOperand":{"AttributeName":"TEST","Comparison":"=","Value":%s}}]...'%value
print get_mock_json('test')
print get_mock_json('ttttttest')
添加函数,该函数始终以提供的值作为参数返回不同的json字符串:
def get_mock_json(value='Test'):
return '...[{"MemberOperand":{"AttributeName":"TEST","Comparison":"=","Value":%s}}]...'%value
print get_mock_json('test')
print get_mock_json('ttttttest')
您可以构造适当的JSON:
import json
the_value = 'Test'
data = [{"MemberOperand": {
"AttributeName":"TEST",
"Comparison":"=",
"Value": the_value}
}]
json_text = json.dumps(data)
您可以构造适当的JSON:
import json
the_value = 'Test'
data = [{"MemberOperand": {
"AttributeName":"TEST",
"Comparison":"=",
"Value": the_value}
}]
json_text = json.dumps(data)
这是格式化为字符串的常规字典(嵌套)-
def changer(x):
import json
d=json.loads(json.loads(json.dumps('[{"MemberOperand":{"AttributeName":"TEST","Comparison":"=","Value":"Test"}}]')))
d[0]['MemberOperand']['AttributeName']=x
return d
print changer('New_TEST')
输出-
[{'MemberOperand': {'Comparison': '=', 'AttributeName': 'New_TEST', 'Value': 'Test'}}]
这是格式化为字符串的常规字典(嵌套)-
def changer(x):
import json
d=json.loads(json.loads(json.dumps('[{"MemberOperand":{"AttributeName":"TEST","Comparison":"=","Value":"Test"}}]')))
d[0]['MemberOperand']['AttributeName']=x
return d
print changer('New_TEST')
输出-
[{'MemberOperand': {'Comparison': '=', 'AttributeName': 'New_TEST', 'Value': 'Test'}}]
这不起作用,因为json花括号是由
格式解释的。更改为%s
可以避开一个项目符号,但会使您与另一个项目符号保持一致。。。如果json的文本中包含一个%s
,那会怎么样?这只是为了测试执行的目的…当然,我们可以使用dict进行字符串插值,比如一个“(value)%s“%{'value':value}
这不起作用,因为json花括号是由格式解释的。更改为%s
可以避开一个项目符号,但会使您与另一个项目符号保持一致。。。如果json的文本中包含一个%s
,那会怎么样?这只是为了测试执行的目的…当然,我们可以使用dict进行字符串插值,比如一个“(value)%s“%{'value':value}
json字符串是否来自其他地方?通常会更新python对象,然后进行JSONIZE。如果您不控制json的源代码,您可以转储、修改并再次加载。@tdelaney不,我直接传递整个json字符串。json字符串是否来自其他地方?通常会更新python对象,然后进行JSONIZE。如果您不控制json的源代码,您可以转储、修改并再次加载。@tdelaney不,我直接传递整个json字符串。