[docs]defreplace_raw_blocks(jsonish):""" Allows embedding raw text blocks for JSON properties, e.g.: [ {"write": { "filename": "/test.py", "text": START_RAW def foo(): print('hello world') (with optional END_RAW and continuation of JSON): [ {"write": { "filename": "/test.py", "text": START_RAW def foo(): print('hello world') END_RAW } } ] """final_string=""in_raw=Falseraw_string=""lines=jsonish.split("\n")lines_=[]forline_inlines:if"START_RAW"inline_:all=line_.split("\\n")forainall:lines_.append(a)elif"END_RAW"inline_:all=line_.split("\\n")forainall:lines_.append(a)else:lines_.append(line_)forlineinlines_:ifin_raw:if"END_RAW"inline:line=line.replace("\\nEND_RAW\n\"","")line=line.replace("\nEND_RAW\n\"","")line=line.replace("\nEND_RAW\"","")line=line.replace("\nEND_RAW","")line=line.replace("END_RAW\"","")line=line.replace("END_RAW","")final_string+=json.dumps(raw_string)+linein_raw=Falseelse:raw_string+=line+"\n"else:if"START_RAW"inline:in_raw=Trueraw_string=""line=line.replace("\"START_RAW\\n","")line=line.replace("\"START_RAW\n","")line=line.replace("\"START_RAW","")line=line.replace("START_RAW \n","")line=line.replace("START_RAW\n","")line=line.replace("START_RAW","")final_string+=lineelse:final_string+=line+"\n"ifin_raw:final_string+=json.dumps(raw_string)final_string=re.sub(r'(?<!")""(?!")','"',final_string)if"START_RAW"infinal_string:final_string=final_string.replace("START_RAW","\"")#else:# print('did not find START_RAW')# check if parsable as partial jsontry:#print("should be json: \n", final_string)ensure_json(final_string)exceptExceptionase:escaped_nl_in_fenced=re.sub(r'```[\s\S]*?```',lambdam:m.group(0).replace('\n','\\n'),final_string)try:ensure_json(escaped_nl_in_fenced)returnescaped_nl_in_fencedexceptExceptionase:try:final_string=final_string.strip().replace("\n","\\n")ensure_json(final_string)returnfinal_stringexceptExceptionase:returnfinal_stringreturnfinal_string
if__name__=="__main__":# read test example 1 from ex1.txtwithopen("ex9.txt")asf:# #with open("test_case_1.json") as f:jsonish=f.read()new_json=replace_raw_blocks(jsonish)print(new_json)data=loads(new_json)print('-----------------------------------------')print(data)