У меня проблемы с использованием json.loads для преобразования в объект dict, и я не могу понять, что делаю неправильно. Точная ошибка, которую я получаю, это
ValueError: Expecting property name: line 1 column 2 (char 1)
Вот мой код:
from kafka.client import KafkaClient
from kafka.consumer import SimpleConsumer
from kafka.producer import SimpleProducer, KeyedProducer
import pymongo
from pymongo import MongoClient
import json
c = MongoClient("54.210.157.57")
db = c.test_database3
collection = db.tweet_col
kafka = KafkaClient("54.210.157.57:9092")
consumer = SimpleConsumer(kafka,"myconsumer","test")
for tweet in consumer:
print tweet.message.value
jsonTweet=json.loads(({u'favorited': False, u'contributors': None})
collection.insert(jsonTweet)
Я почти уверен, что ошибка возникает на второй и последней строке
jsonTweet=json.loads({u'favorited': False, u'contributors': None})
но я не знаю, что делать, чтобы это исправить. Любой совет будет принят во внимание.
"
том, что ошибка копирования и вставки?print tweet.message.value
?ValueError
отправлено из-за ошибки во вводе JSON, а не из-за проблемы в вашем коде. (Помимо пропавших без вести,"
кто обычно должен отправлять,SyntaxError
поэтому я предполагаю, что это просто ошибка копирования и вставки.)Ответы:
json.loads
загрузит строку json в питонdict
,json.dumps
выгружает питонdict
в строку json, например:Итак, эта строка неверна, поскольку вы пытаетесь
load
использовать pythondict
иjson.loads
ожидаете действительного,json string
которое должно быть<type 'str'>
.Поэтому, если вы пытаетесь загрузить json, вам следует изменить то, что вы загружаете, чтобы он выглядел так, как указано
json_string
выше, или вы должны сбросить его. Это всего лишь мое предположение из предоставленной информации. Чего вы пытаетесь достичь?Также не нужно указывать
u
перед строками, как @Cld упоминается в комментариях.источник
Я столкнулся с другой проблемой, которая возвращает ту же ошибку.
Проблема с одинарной цитатой
Я использовал строку json с одинарными кавычками :
Но
json.loads
принимает только двойные кавычки для свойств json :Проблема с последней запятой
json.loads
не принимает последнюю запятую:Решение:
ast
решить проблемы с одинарной кавычкой и последней запятойВы можете использовать
ast
(часть стандартной библиотеки для Python 2 и 3) для этой обработки. Вот пример:Использование
ast
предотвратит возникновение проблем с одинарными кавычками и последней запятой, поскольку JSON будет интерпретироваться как словарь Python (поэтому вы должны следовать синтаксису словаря Python). Это довольно хорошая и безопасная альтернативаeval()
функции для литеральных структур.Документация Python предупреждает нас об использовании больших / сложных строк:
json.dumps в одинарных кавычках
Чтобы
json.dumps
легко использовать одинарные кавычки, вы можете использовать этот код:ast
документацияаст Python 3 документ
аст Python 2 документ
Инструмент
Если вы часто редактируете JSON, вы можете использовать CodeBeautify . Это поможет вам исправить синтаксическую ошибку и минимизировать / украсить JSON.
Я надеюсь, что это помогает.
источник
источник
Все остальные ответы могут отвечать на ваш запрос, но я столкнулся с той же проблемой, которая была связана с ошибкой,
,
которую я добавил в конце моей строки json следующим образом:Наконец-то он заработал, когда удалил лишнее
,
:Надеюсь на эту помощь! ура.
источник
используется как, например
источник
Другой случай, когда я столкнулся с этим, был, когда я использовал
echo
для передачи JSON в свой скрипт python и небрежно заключил строку JSON в двойные кавычки:Обратите внимание, что в самой строке JSON есть кавычки, и я должен был сделать:
Как это было, это то , что получил сценарий питона:
{thumbnailWidth: 640}
; двойные кавычки были удалены.источник