add ut test_repair_invalid_json

This commit is contained in:
better629 2023-11-23 11:53:11 +08:00
parent 502bb2c449
commit c25d5a73d1
2 changed files with 53 additions and 7 deletions

View file

@ -182,19 +182,23 @@ def repair_invalid_json(output: str, error: str) -> str:
# different general problems
if line.endswith("],"):
# problem, redundant char `]`
line = line.replace("]", "")
new_line = line.replace("]", "")
elif line.endswith("},") and not output.endswith("},"):
# problem, redundant char `}`
line = line.replace("}", "")
new_line = line.replace("}", "")
elif line.endswith("},") and output.endswith("},"):
line = line[:-1]
elif '",' not in line:
line = f'{line}",'
new_line = line[:-1]
elif '",' not in line and ',' not in line:
new_line = f'{line}",'
elif "," not in line:
# problem, miss char `,` at the end.
line = f"{line},"
new_line = f"{line},"
elif "," in line and len(line) == 1:
new_line = f'"{line}'
elif '",' in line:
new_line = line[:-2] + "',"
arr[line_no] = line
arr[line_no] = new_line
output = "\n".join(arr)
logger.info(f"repair_invalid_json, raw error: {error}")

View file

@ -132,6 +132,48 @@ def test_repair_json_format():
assert output == target_output
def test_repair_invalid_json():
raw_output = """{
"key": "value"
},
}"""
target_output = """{
"key": "value"
,
}"""
output = repair_invalid_json(raw_output, "Expecting ',' delimiter: line 3 column 1")
assert output == target_output
raw_output = """{
"key": "
value
},
}"""
target_output = """{
"key": "
value
",
}"""
output = repair_invalid_json(raw_output, "Expecting ',' delimiter: line 4 column 1")
output = repair_invalid_json(output, "Expecting ',' delimiter: line 4 column 1")
assert output == target_output
raw_output = """{
"key": '
value
},
}"""
target_output = """{
"key": '
value
',
}"""
output = repair_invalid_json(raw_output, "Expecting ',' delimiter: line 4 column 1")
output = repair_invalid_json(output, "Expecting ',' delimiter: line 4 column 1")
output = repair_invalid_json(output, "Expecting ',' delimiter: line 4 column 1")
assert output == target_output
def test_retry_parse_json_text():
invalid_json_text = """{
"Original Requirements": "Create a 2048 game",