Удаление автоматически сгенерированных кавычек с помощью json.dumps( ) (Python)

#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 . Это запрашивает отступы для объектов и элементов массива в зависимости от вложенности.