#python #json
#python #json
Вопрос:
Я использую метод json.dumps() путем передачи в OrderedDict . (Синтаксис см. Ниже). Он делает это правильно, но есть одно конкретное поле "labels":
, которое последовательно окружает входные " "
данные (кавычками), и мне это не нужно.
desiredJson = OrderedDict([('type', ""), ('labels', '' ), ('bgColor', ''), ('borderColor', '')])
for (category_type, updatedLabels, bgColors, borderColors) in zip(type_, labels_, bgColor_, borderColor_):
print category_type updatedLabels
desiredJson["type"] = category_type
desiredJson["labels"] = '["%s", "%s"]' % (category_type, updatedLabels)
desiredJson["bgColor"] = bgColors
desiredJson["borderColor"] = borderColors
json.dumps(desiredJson, sort_keys = False, indent = 4, separators=(',' , ': '))
Вот как это выглядит: (просто образец блока, он выводит много)
{
"type": "Overall",
"labels": "["Overall", "Over"]",
"bgColor": "#ff7f8d",
"borderColor": "darken"
}
Мне нужно, чтобы он следовал этому формату:
{
"type": "Overall",
"labels": ["Overall", "Over"], // NOTE DIFFERENCE
"bgColor": "#ff7f8d",
"borderColor": "darken"
}
** Вставка списка в dic **
{
"type": "Overall",
"labels": [
"Overall",
"Over"
],
"bgColor": "#ff7f8d",
"borderColor": "darken"
}
Ответ №1:
Это потому, что вы создали элемент в виде строки:
desiredJson["labels"] = '["%s", "%s"]' % (category_type, updatedLabels)
Если вы хотите, чтобы это был массив в JSON, вы должны установить его в список Python:
desiredJson["labels"] = [category_type, updated_labels]
Комментарии:
1. Это работает для помещения его в правильное обозначение списка, но создает еще одну проблему форматирования… Я думаю, что json.dump() обрабатывает список с помощью отступа. Я включил свой вывод из этого метода в исходное сообщение.
2. Это не должно быть проблемой, JSON допускает любую форму пробелов между элементами.
3. Вы получаете это, потому что вы использовали
indent = 4
. Это запрашивает отступы для объектов и элементов массива в зависимости от вложенности.