2017-02-20 9 views
0

В Python 3, чтобы загрузить JSON ранее сохраненный как это:питона JSON объект должен быть Сила, байт или ByteArray, а не «Словарь

json.dumps(dictionary)

выходом является чем-то вроде

{"('Hello',)": 6, "('Hi',)": 5}

, когда я использую

json.loads({"('Hello',)": 6, "('Hi',)": 5})

это не работает, это происходит:

TypeError: the JSON object must be str, bytes or bytearray, not 'dict'

+1

'json.loads ('' '{" (' Hello ',) ": 6," (' Hi ',) ": 5}' '')'. 'S' в' load' обозначает строку. – BallpointBen

+0

Похоже, вы уже имеете дело с фактическим словарем, а не с строкой. Как вы читаете данные, которые вы сбрасывали? – jorijnsmit

ответ

11

json.loads принимать строку в качестве входных данных и возвращает словарь в качестве вывода.

json.dumps принять словарь в качестве входных данных и возвращает строку в качестве вывода.


С json.loads({"('Hello',)": 6, "('Hi',)": 5}),

Вы вызываете json.loads со словарем в качестве входных данных.

Вы можете это исправить следующим образом (хотя я не совсем уверен, что это точка, что):

d1 = {"('Hello',)": 6, "('Hi',)": 5} 
s1 = json.dumps(d1) 
d2 = json.loads(s1) 
+0

Thanx @barak manos это действительно помогло. У меня были данные возврата, которые были 'json.loads (data)'. когда я декодирую, что с помощью 'json.dumps (loadedData)' избавиться от указанной выше ошибки и удастся преобразовать ее в объект python с помощью 'object_hook'. –

1

Вы передаете словарь в функцию, которая ожидает строку.

Синтаксис:

{"('Hello',)": 6, "('Hi',)": 5} 

является как действительный словарь Python буквальным и действительный объект JSON буквальным. Но loads не принимает словарь; он берет строку, которая затем интерпретируется как JSON и возвращает результат как словарь (или строку или массив или число, в зависимости от JSON, но обычно словарь).

Если передать эту строку loads:

'''{"('Hello',)": 6, "('Hi',)": 5}''' 

тогда он будет возвращать словарь, который выглядит очень похож на тот, который вы пытаетесь перейти к нему.

Вы также можете использовать схожесть JSON литералов объектов в Python словарей литералов, делая это:

json.loads(str({"('Hello',)": 6, "('Hi',)": 5})) 

Но в любом случае вы бы просто получить обратно словарь, который вы передаете в, так что я Не знаю, что это будет сделано. Какова ваша цель?

 Смежные вопросы

  • Нет связанных вопросов^_^