Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 Аватар для Аноним92
75 / 49 / 30
Регистрация: 14.10.2019
Сообщений: 147

Получить словарь из строки с помощью json

16.02.2024, 11:56. Показов 329. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!

Помогите мне, пожалуйста, получить словарь из строки.

На вход с консоли приходит вот такая строка:
[{"name": "George", "surname": "Johnson"}, {"name": "James", "surname": "Thompson"}, {"name": "Charles", "surname": "Parker"}]

Хотелось бы сделать из нее список словарей.

Наверно, можно, просто посимвольно парсить эту строку. Типа если дошел до двоеточия, значит считанное до этого момента есть ключ. И т.д. Но может, в python существует какой-то простой способ сделать это автоматически?

Я думала, через json получится. Обнаружила следующее.

1. Если прямо в код вставить эту строку, то соответствующая переменная будет иметь тип список словарей. И тогда после json.dumps, json.loads мы снова имеем список словарей.
2. Но если эта строка приходит из консоли (то, что мне нужно), то это просто строка. И после json.dumps, json.loads у нас по-прежнему ничего нет, кроме строки


Python
1
2
3
4
5
6
7
8
9
10
import json
 
dict_input = [{"name": "George", "surname": "Johnson"}, {"name": "James", "surname": "Thompson"}, {"name": "Charles", "surname": "Parker"}]
input = input() # [{"name": "George", "surname": "Johnson"}, {"name": "James", "surname": "Thompson"}, {"name": "Charles", "surname": "Parker"}]
 
json_dict_input = json.dumps(dict_input)
json_input = json.dumps(input)
 
python_dict_input = json.loads(json_dict_input)
python_input = json.loads(json_input)

В дебагере видно, что результат json.dumps от строки и результат json.dumps от списка словарей отличаются обратными слешами. Поэтому я попробовала избавиться от этих слешей, чтобы обмануть json.loads

Python
1
2
3
4
5
6
7
8
9
10
import json
 
dict_input = [{"name": "George", "surname": "Johnson"}, {"name": "James", "surname": "Thompson"}, {"name": "Charles", "surname": "Parker"}]
input = input() # [{"name": "George", "surname": "Johnson"}, {"name": "James", "surname": "Thompson"}, {"name": "Charles", "surname": "Parker"}]
 
json_dict_input = json.dumps(dict_input)
json_input = json.dumps(input).replace("\\", "") # избавляюсь от слешей, чтобы json.loads отработала на json_input точно так же, как на json_dict_input
 
python_dict_input = json.loads(json_dict_input)
python_input = json.loads(json_input)
Но поправленный мной json_input json.loads не принимает совсем - выдает ошибку JSONDecodeError("Extra data", s, end)[ATTACH][/ATTACH]
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.02.2024, 11:56
Ответы с готовыми решениями:

Как получить из строки JSON токен используя JSON.NET?
Доброго времени суток, Господа. Поскажите пожалуйста. Я никогда не работал с JSON. Вот тут решил попробовать. Качнул либу JSON.NET, все...

С помощью Ajax получить данные на стороннем ресурсе (JSON).
Можно ли мне Ajax'om получить данные на стороннем ресурсе(JSON), и использовать их у себя на сайте? Чтобы пользователь не видел эти...

Получить вывод строки из JSON
Привет всем, ребята не могу получить строки из этого кода { "groups": { "A111": { "ID":...

2
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
16.02.2024, 12:24
Лучший ответ Сообщение было отмечено Аноним92 как решение

Решение

Изи
Python
1
2
3
4
5
d = eval(input())
# print(type(d))        # <-- list
for i in d:
    # print(type(i))    # <-- dict
    print(i['name'])
2
 Аватар для Aviz__
2748 / 2056 / 508
Регистрация: 17.02.2014
Сообщений: 9,483
17.02.2024, 20:15
Лучший ответ Сообщение было отмечено Аноним92 как решение

Решение

Аноним92,
Python
1
2
3
4
5
6
7
8
9
10
11
12
import json
 
dict_input = [{"name": "George", "surname": "Johnson"}, {"name": "James", "surname": "Thompson"},
              {"name": "Charles", "surname": "Parker"}]
my_input = '[{"name": "George", "surname": "Johnson"}, {"name": "James", "surname": "Thompson"}, {"name": "Charles", "surname": "Parker"}]'
 
json_dict_input = json.dumps(dict_input)
json_input = json.loads(my_input)
 
python_dict_input = json.loads(json_dict_input)
print(python_dict_input)
print(json_input)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.02.2024, 20:15
Помогаю со студенческими работами здесь

Не выходит получить данные из строки json
Строка в файле json: {&quot;8&quot;:{&quot;8&quot;:,]}} Задача: получить массивы для использования значений таким образом arrOfArr //равно 0 ...

Получить ответ JSON в виде строки
Прошу прощения за возможные ошибки в вопросе. С помощью WebBrowser.Navigate() отправляется запрос. Работает корректно, но ответ...

как получить массив из json строки
Добрый день! подскажите, можно ли как то получить массив из такой cтроки средствами php ...

Задайте с терминала словарь. Напечатайте те слова исходной строки, которые входят в словарь.
Задана строка ---Задайте с терминала словарь (перечень эталонных слов). Напечатайте те слова исходной строки, которые входят в...

Распарсить с помощью Json.Net приходящий ответ в виде JSON
Нужна помощь с json {&quot;success&quot;:true, &quot;rgInventory&quot;:{ &quot;1025429056&quot;:{ &quot;id&quot;:&quot;1025429056&quot;, &quot;classid&quot;:&quot;310779217&quot;,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru