config.ini
request = {"order": {"order_id": {order_id},"customer_id":10001, "prd_price":50, "quantity":{quantity}, "total_price": {total_price}, "product_id":1, "last_name": "lavanya"}}
data = {'quantity': '315', 'total_price': '50', 'order_id': '102'}
myscript.py
req = config[reflowStep]['request']
req = req.format(**data)
例外:
Traceback (most recent call last):
File "myscript.py", line 247, in reflow
req = req.format(**data)
KeyError: '"order"'
预期输出:
req = {
"order":{
"order_id":102,
"customer_id":10001,
"prd_price":50,
"quantity":315,
"total_price":50,
"product_id":1,
"last_name":"lavanya"
}
}
如果我作为字符串传递(不带'{/}'),则它可以正常工作。 例如:
request = "order_id": {order_id},"customer_id":10001, "prd_price":50, "quantity":{quantity}, "total_price": {total_price}, "product_id":1, "last_name": "lavanya"
但是我的要求是我需要在运行时将值填充到json中。
有人,可以帮我吗?有人可以建议满足我需求的最佳方法吗?
答案 0 :(得分:0)
如果您需要JSON数据,那么您确实应该在配置中使用JSON-INI格式在这方面受到很大限制,并且如果您尝试在其中填充JSON,则可能会有各种工件。
也就是说,如果您唯一的问题是在使用str.format()
时进行字段插值,则应该使用双括号(即{{
和}}
)来使花括号转义,以达到所需的效果,即:
request = '{{"order": {{"order_id": {order_id}, "quantity":{quantity}, "price": {price}}}}}'
data = {'quantity': '315', 'price': '50', 'order_id': '102'}
print(request.format(**data))
# {"order": {"order_id": 102, "quantity":315, "price": 50}}
或者如果您希望将其格式化:
print(json.dumps(json.loads(request.format(**data)), indent=2))
屈服:
{
"order": {
"order_id": 102,
"quantity": 315,
"price": 50
}
}