#python #json
#python #json
Вопрос:
API, который я использую с Python, ожидает ввода в формате JSON в один момент, подобный этому:
'type': 'leadlist',
'filter': [1135],
Но я могу передавать API такого рода значения только с помощью Python:
'type': 'leadlist',
'filter': '[1135]',
Значение для ключа «фильтр» генерируется следующим образом. Обратите внимание, что это строка, независимо от того, является ли в первом примере «ничего»
'filter':f"[{key}]"
Есть ли какой-либо способ, которым это не может быть строкой?
Редактировать: ожидаемый ввод не является списком. Это идентификатор (число) элемента в программном обеспечении, которое я использую, который каким-то образом находится между скобками в JSON API.
Комментарии:
1. использовать модуль
json
2. Что генерирует эту строку? Вы должны исправить это, чтобы возвращать
list
не строковое представление списка
Ответ №1:
Если вы можете передать его в виде списка, чего, я думаю, он и ожидает, тогда вы бы сделали:
'filter':[key]
Так что в целом, может быть, что-то вроде:
body = {'type': 'leadlist',
'filter':[key]}
Комментарии:
1. К сожалению, он не ожидает список. Число в скобках — это уникальный идентификатор элемента в программном обеспечении. Я полагаю, что тот, кто написал библиотеку Python для используемого мной программного обеспечения (Mautic), не подумал о необходимости ссылаться на идентификаторы элементов между скобками, потому что программное обеспечение явно принимает только ссылку на идентификатор в скобках, но не в виде строки…
2. Если ссылка ожидает фигурные скобки, но не строку со скобками, она принимает список, вероятно, целых чисел. Если он также принимает только одно целое число, он может быть настроен как для кратных, так и для одиночных чисел. Вы должны просто поместить туда ключ без скобок, если это только один, предполагая, что ключ уже является целым числом.
3. Я пришел к тому же выводу десять минут назад и попытался передать целое число без скобок, и это сработало :). Я поделился ответом ниже! Спасибо за ваше время!
Ответ №2:
Хорошо, я просто понял это.
Хотя API Mautic, похоже, ожидает, что идентификатор элемента будет указан в скобках, просто случается, что он также принимает его как целое число даже без скобок.
Итак, в этом случае решение таково:
'type': 'leadlist',
'filter': int(f'{value}'),
Комментарии:
1. Почему вы делаете int(f’{value}’), когда вы могли бы просто написать value или int (value), если это не целое число. Строка f предназначена для объединения нескольких строк, но в этом случае у вас есть только один элемент, поэтому в нем нет необходимости. Просто ссылайтесь на объект.
2. @GiraffeMan91 Хорошая мысль. Я использовал его раньше, потому что я ссылался на строку и помещал ее в скобки, но действительно, теперь ее можно записать так просто, как вы описали 🙂 Спасибо!
Ответ №3:
Если вы действительно хотите, чтобы строка со скобками была преобразована в список python, вы можете использовать ast.literal_eval следующим образом:
import ast
ast.literal_eval("[1,2,3]")
>> [1,2,3] #gives a python list
Это работает для большинства структур данных Python.