Преобразование строки типа '{x:=1, y=2, z=3}' в JSON в python

Я хочу преобразовать строку '{x:=1, y=2, z=3}' в объект Python. Я попробовал json.loads(), но получил ошибку, ожидалось, что строка будет '{"x":1, "y":2, "z":3}'.

Я новичок в Python, если кто-нибудь может помочь, это было бы здорово.

Мутабельность и переработка объектов в Python
Мутабельность и переработка объектов в Python
Объекты являются основной конструкцией любого языка ООП, и каждый язык определяет свой собственный синтаксис для их создания, обновления и...
Другой маршрут в Flask Python
Другой маршрут в Flask Python
Flask - это фреймворк, который поддерживает веб-приложения. В этой статье я покажу, как мы можем использовать @app .route в flask, чтобы иметь другую...
14 Задание: Типы данных и структуры данных Python для DevOps
14 Задание: Типы данных и структуры данных Python для DevOps
Проверить тип данных используемой переменной, мы можем просто написать: your_variable=100
Python PyPDF2 - запись метаданных PDF
Python PyPDF2 - запись метаданных PDF
Python скрипт, который будет записывать метаданные в PDF файл, для этого мы будем использовать PDF ридер из библиотеки PyPDF2 . PyPDF2 - это...
Переменные, типы данных и операторы в Python
Переменные, типы данных и операторы в Python
В Python переменные используются как место для хранения значений. Пример переменной формы:
Почему Python - идеальный выбор для проекта AI и ML
Почему Python - идеальный выбор для проекта AI и ML
Блог, которым поделился Harikrishna Kundariya в нашем сообществе Developer Nation Community.
0
0
51
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете попробовать проанализировать строку самостоятельно:

def parse_input(x):
    result = dict()
    x = x.replace(":", "")
    for pair in x[1:-1].split(","):
        key,value = tuple(pair.split(" = "))
        result[key.strip()] = int(value.strip())
    return result

В качестве альтернативы вы можете преобразовать строку в допустимый json, а затем загрузить ее:

obj = json.loads(data.replace("{", '{"').replace(":", "").replace(" = ", '":').replace(", ", ', "'))

Если вам нужно злое решение, которое «работает», то вам сюда:

Однако используйте это только в том случае, если ввод на 100% доверен (поскольку он использует eval). Кроме того, это будет работать только для входных данных, точно соответствующих вашему примеру.

obj = eval(data.replace("{", "{'").replace(":", "").replace(" = ", "':").replace(", ", ", '"))

Примечание. Не используйте eval для ненадежного ввода. Например, попробуйте eval('{\'x\':__import__(\'os\').listdir()}')

Abdul Niyas P M 11.11.2022 07:31

(Я знаю, что вы уже обсуждали доверенные входные данные в своем ответе, но зачем использовать eval, когда существует так много более безопасных (и таких же простых) вариантов? Напишите регулярное выражение. Или прочитайте строку посимвольно и напишите свою собственную логику для анализа целые числа (или другие данные). Или, поскольку ваш ответ включает в себя: split() по пробелу или другому разделителю, а затем снова разделить на =, В каждом из этих случаев вы можете использовать более безопасный метод, такой как int, для оценки ввода , и все, что может произойти, это выдача ошибки, которую вам просто нужно поймать и обработать соответствующим образом.

Pranav Hosangadi 11.11.2022 07:40
eval почти никогда не бывает правильным ответом. IMO часть после «если это не то, что вы ищете» должна быть в центре вашего ответа. Помимо части eval, это хороший ответ. Добро пожаловать в Stack Overflow!
Pranav Hosangadi 11.11.2022 07:40

Вы правы, что eval не следует использовать для любого ненадежного ввода. Я изменил основной ответ на другой вариант. Тем не менее, я думаю, что eval и exec могут быть очень полезными инструментами для быстрых и хакерских решений, которые используются только один раз для надежных данных.

Lorenz Hetterich 11.11.2022 07:50

Спасибо за ответ, кстати, я сделал это - import json data = '{x=1, y=2}' y = json.loads(data.replace('{', '{"').replace('=', '":').replace(', ', ', "'))

the_tech_guy 11.11.2022 07:53

Другие вопросы по теме