Это какой-то кошмар.
Никогда нельзя ковыряться руками в специализированных форматах.
А надо использовать только предназначенные для этого инструменты. Тем более что это не так сложно.
В данном случае надо
- аккуратно распаковать json
- вытащить из него и аккуратно распаковать query string
- поменять значение на нужное
- аккуратно запаковать query string
- аккуратно запаковать json
- и никаких f-strings!
from urllib import parse
import json
text = '{"req":[{"index":"prod","param":"q=%s&hits=4&filters=live%3A1"}]}'
arr = json.loads(text)
qs = parse.parse_qs(arr['req'][0]['param'])
qs['q'] = model
arr['req'][0]['param'] = parse.urlencode(qs,doseq=True)
text = json.dumps(arr)
При таком подходе конечный результат всегда будет отформатирован правильно, и программа не будет падать на ровном месте.
spoilerТакое ощущение, что Питон - это новый пэхапе. 10 лет назад на пыхе точно также колупали чем попало, лишь бы заработало здесь и сейчас. И теперь тоже самое в питоне начинается