From 9bf44a665257dcb1305daf04dd0ce44e4392e30f Mon Sep 17 00:00:00 2001 From: codingFeng101 <3524962421@qq.com> Date: Sat, 27 Jun 2026 10:29:00 +0800 Subject: [PATCH] Support CRLF fenced JSON extraction --- .../autogen-core/src/autogen_core/utils/_load_json.py | 2 +- python/packages/autogen-core/tests/test_json_extraction.py | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/python/packages/autogen-core/src/autogen_core/utils/_load_json.py b/python/packages/autogen-core/src/autogen_core/utils/_load_json.py index 95ccb0e7c0df..fada058ea605 100644 --- a/python/packages/autogen-core/src/autogen_core/utils/_load_json.py +++ b/python/packages/autogen-core/src/autogen_core/utils/_load_json.py @@ -5,7 +5,7 @@ def extract_json_from_str(content: str) -> List[Dict[str, Any]]: """Extract JSON objects from a string. Supports backtick enclosed JSON objects""" - pattern = re.compile(r"```(?:\s*([\w\+\-]+))?\n([\s\S]*?)```") + pattern = re.compile(r"```(?:\s*([\w\+\-]+))?\r?\n([\s\S]*?)```") matches = pattern.findall(content) ret: List[Dict[str, Any]] = [] # If no matches found, assume the entire content is a JSON object diff --git a/python/packages/autogen-core/tests/test_json_extraction.py b/python/packages/autogen-core/tests/test_json_extraction.py index f511d40977dd..691e8db6ed5f 100644 --- a/python/packages/autogen-core/tests/test_json_extraction.py +++ b/python/packages/autogen-core/tests/test_json_extraction.py @@ -1,4 +1,5 @@ import pytest + from autogen_core.utils import extract_json_from_str @@ -72,6 +73,10 @@ def test_extract_json_from_str_codeblock() -> None: multi_resp = extract_json_from_str(multi_json_str) assert multi_resp == multi_json_resp + crlf_code_block_str = '```json\r\n{"name": "Alice", "age": 28, "city": "Seattle"}\r\n```' + crlf_resp = extract_json_from_str(crlf_code_block_str) + assert crlf_resp == code_block_resp + invalid_lang_code_block_str = """ ```notjson {