Скрипту Python не удается извлечь JSON из содержимого сообщения: «В сообщении не обнаружено содержимого JSON».Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Скрипту Python не удается извлечь JSON из содержимого сообщения: «В сообщении не обнаружено содержимого JSON».

Сообщение Anonymous »

Я работаю над сценарием Python, который извлекает содержимое JSON из строки сообщения. Функция предназначена для анализа блока JSON, заключенного в теги json. Ниже приведены входные данные JSON и сценарий, который я использую:
Ввод JSON:

Код: Выделить всё

json
{
"description": "Crie um novo projeto chamado 'ProjetoTeste1'.",
"code": "local new_project = NewProject('ProjetoTeste1')
if new_project then
print('Projeto criado com sucesso: ' .. new_project.name)
else
print('Falha ao criar o projeto')
end"
}
Скрипт Python:

Код: Выделить всё

import re
import json
from langchain_core.messages import AIMessage

class CodeSolution:
def __init__(self, prefix: str, code: str):
self.prefix = prefix
self.code = code

def escape_code_field(code_str):
# Escape backslashes first
code_str = code_str.replace('\\', '\\\\')
# Escape double quotes
code_str = code_str.replace('"', '\\"')
# Escape newlines
code_str = code_str.replace('\n', '\\n')
return code_str

def unescape_code_field(code_str):
# Unescape newlines
code_str = code_str.replace('\\n', '\n')
# Unescape double quotes
code_str = code_str.replace('\\"', '"')
# Unescape backslashes
code_str = code_str.replace('\\\\', '\\')
return code_str

def extract_json(message) -> Any:
text = message.content
print("Message content:")
print(text)
pattern =  r"```json\s*(\{.*?\})\s*```"
matches = re.findall(pattern, text, re.DOTALL)

if not matches:
raise ValueError("No JSON content found in the message.")

json_content = matches[0].strip()

# Escape the code field
code_pattern = r'("code"\s*:\s*")([\s\S]*?)("\s*[,}])'
def replace_code(match):
code_value = match.group(2)
escaped_code = escape_code_field(code_value)
return f'{match.group(1)}{escaped_code}{match.group(3)}'

json_content_escaped = re.sub(code_pattern, replace_code, json_content)

try:
parsed = json.loads(json_content_escaped)
except json.JSONDecodeError as e:
print(f"Error parsing content with JSON: {e}")
print("Escaped JSON content:")
print(json_content_escaped)
raise ValueError(f"Failed to parse JSON content: {e}") from e

prefix = parsed.get('description', 'No description available')
code = parsed.get('code', '')

if not code:
raise ValueError("No 'code' field found in the parsed JSON.")

code = unescape_code_field(code)

return CodeSolution(prefix=prefix, code=code)
Отслеживание ошибок:

Код: Выделить всё

ValueError: No JSON content found in the message.
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
...
ValueError: No JSON content found in the message.
Дополнительная информация:
Работающий JSON более сложен и включает вложенные структуры, тогда как неудачный JSON проще. .
Оба блока JSON правильно отформатированы и заключены в теги json в содержимом сообщения.
Я адаптировал скрипт для обработки второго JSON, но он все равно не распознает его.
Пример рабочего JSON :

Код: Выделить всё

json
{
"description": "Obtaining the production of the well P10 in the model 'Modelo10' of the project 'ProjetoTeste10'",
"code": "local projects = GetProjects()
local project = projects['ProjetoTeste10']
if project then
local model = project.flux['Modelo10']
if model then
local well = model.well['P10']
if well then
local np = well.data['NP']
if np then
print('Produção acumulada do poço P10: ' ..  np[#np])
else
print('Dados de produção não encontrados para o poço P10.')
end
else
print('Poço P10 não encontrado no modelo \"Modelo10\".')
end
else
print('Modelo \"Modelo10\" não encontrado no projeto \"ProjetoTeste10\".')
end
else
print('Projeto \"ProjetoTeste10\" não encontrado.')
end"
}
Что я пробовал:
  • Проверил, что JSON отформатирован правильно. Проверил шаблон
    регулярного выражения, чтобы убедиться, что он точно захватывает блок JSON. Добавлены операторы печати
    для отладки и подтверждения содержимого сообщения.
Запрос о помощи:Почему скрипту не удается найти содержимое JSON в более простом примере JSON, одновременно успешно анализируя более сложный? Есть ли проблема с шаблоном регулярного выражения или способом обработки JSON? Любые рекомендации о том, как это исправить, будут очень признательны. Спасибо!

Подробнее здесь: https://stackoverflow.com/questions/791 ... tent-found
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»