Основная проблема здесь:
with open('merged.json', 'a+', encoding='utf-8') as hml:
d = json.load(hml)
Пытаетесь открыть файл для добавления данных и одновременно считать из него.
Когда файл открывается "a+", указатель помещается в самый конец файла. Поэтому при считывании из него последующим json.load(hml) данных просто не будет (даже если файл что-то и содержит, т.к. указатель в самом конце). Поэтому и возвращается эта ошибка, что json некорректный.
Можно это поправить, если после открытия файла перемотать указатель в его начало, добавив перед json.load строку
hml.seek(0)
Но вообще в целом по структуре всего кода, лучше не пытаться с json файлами работать путем их дописывания.
Лучше
1. Сначала полностью считать исходный файл в свой список/словарь
2. Сделать изменения/дополнения именно в этом списке
3. В конце записать уже полные данные с нуля в файл .json
Тогда и ошибок будет меньше, и не понадобится изобретать костыли в виде replace("]", "")