diff --git a/libs/langchain/langchain/output_parsers/json.py b/libs/langchain/langchain/output_parsers/json.py
index f0f653eca2..7465aba2fe 100644
--- a/libs/langchain/langchain/output_parsers/json.py
+++ b/libs/langchain/langchain/output_parsers/json.py
@@ -13,7 +13,7 @@ def _replace_new_line(match: re.Match[str]) -> str:
value = re.sub(r"\n", r"\\n", value)
value = re.sub(r"\r", r"\\r", value)
value = re.sub(r"\t", r"\\t", value)
- value = re.sub('"', r"\"", value)
+ value = re.sub(r'(? None:
"action": "Final Answer",
"action_input": '```bar\n
\n\ttext\n
```',
}
+
+
+TEST_CASES_ESCAPED_QUOTES = [
+ JSON_WITH_UNESCAPED_QUOTES_IN_NESTED_JSON,
+ JSON_WITH_ESCAPED_QUOTES_IN_NESTED_JSON,
+ JSON_WITH_ESCAPED_DOUBLE_QUOTES_IN_NESTED_JSON,
+]
+
+
+@pytest.mark.parametrize("json_string", TEST_CASES_ESCAPED_QUOTES)
+def test_parse_nested_json_with_escaped_quotes(json_string: str) -> None:
+ parsed = parse_json_markdown(json_string)
+ assert parsed == {
+ "action": "Final Answer",
+ "action_input": '{"foo": "bar", "bar": "foo"}',
+ }
+
+
+def test_parse_json_with_python_dict() -> None:
+ parsed = parse_json_markdown(JSON_WITH_PYTHON_DICT)
+ assert parsed == {
+ "action": "Final Answer",
+ "action_input": {"foo": "bar", "bar": "foo"},
+ }