使用Python对JSON字符串进行插值替换

时间:2018-10-01 09:28:32

标签: python json python-3.x

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中。

有人,可以帮我吗?有人可以建议满足我需求的最佳方法吗?

1 个答案:

答案 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
  }
}