首页 > 解决方案 > 无法在 Python 中的 JSON 字符串中插入变量

问题描述

我想用一个变量替换 JSON 字符串中的一些文本。

data = '[ { "exchange": "NSE", "tradingsymbol": "INFY", "transaction_type": "BUY", "variety": "regular", "product": "CNC", "order_type": "MARKET", "quantity": 1, "price": 0, "trigger_price": 0 } ]'

我将“INFY”更改为变量符号,但是当我发送请求时收到无效的 JSON 错误。post()

symbol = "INFY"

data = '[ { "exchange": "NSE", "tradingsymbol": symbol, "transaction_type": "BUY", "variety": "regular", "product": "CNC", "order_type": "MARKET", "quantity": 1, "price": 0, "trigger_price": 0 } ]'

我尝试在 stackoverflow 上查看类似的主题,但无法在我的代码中实现它。

任何帮助,将不胜感激。

更新

requests.post('https://api.kite.trade/margins/orders', headers=headers, data=data)

print(requests.text)

'{"status":"error","message":"invalid json","data":{},"error_type":"InputException"}'

使用“INFY”而不是变量, print(response.text) 的结果是:

{"status":"success","data":[{"type":"equity","tradingsymbol":"INFY","exchange":"NSE","span":0,"exposure":0,"option_premium":0,"additional":0,"bo":0,"cash":0,"var":122.96690999999998,"pnl":{"realised":0,"unrealised":0},"total":122.96690999999998}]}

解决方案

@barny 的解决方案有效:

在此处更新以关闭主题。

data  = '[ { "exchange": "NSE", "tradingsymbol": "INFY", "transaction_type": "BUY", "variety": "regular", "product": "MIS", "order_type": "LIMIT", "quantity": 1, "price": 100, "trigger_price": 0 } ]'
    
data1 = json.loads(data) 
data1[0]['tradingsymbol']= tradingsymbol
    
jsontext = json.dumps(data1)

response = requests.post('https://api.kite.trade/margins/orders', headers=headers, data=jsontext)   

标签: pythonjson

解决方案


您可以使用 json.loads 转换为 Python 字典并在那里进行更改,如下所示:

import json

data  = '[ { "exchange": "NSE", "tradingsymbol": "INFY", "transaction_type": "BUY", "variety": "regular", "product": "MIS", "order_type": "LIMIT", "quantity": 1, "price": 100, "trigger_price": 0 } ]'

data1=json.loads(data)
data1[0]['tradingsymbol']='symbol'
jsontext = json.dumps(data)

推荐阅读