如何在Python脚本中参数化JSON对象

如何在Python脚本中参数化JSON对象,python,json,Python,Json,我正在用Python编写一个测试,其中在参数中指定JSON sting,如下所示: json = '...[{"MemberOperand":{ "AttributeName":"TEST", "Comparison":"=", "Value":"Test"

我正在用Python编写一个测试,其中在参数中指定JSON sting,如下所示:

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字符串。