JSON ValueError: Ожидание имени свойства: строка 1 столбец 2 (символ 1)

У меня возникли проблемы с использованием json.loads для преобразования в объект dict, и я не могу понять, что я делаю неправильно. Точная ошибка, которую я запускаю, это

ValueError: Expecting property name: line 1 column 2 (char 1) 

Вот мой код:

 __author__ = 'xxdpavelxx' 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) 

Я уверен, что ошибка происходит от 2-й до последней строки

 jsonTweet=json.loads({u'favorited': False, u'contributors': None}) 

но я не знаю, что делать, чтобы исправить это. Любой совет будет принят во внимание.

  • Операции, основанные на времени, основанные на векселях, в которых имеет место состояние предшествующих элементов, - соответствуют ли петли?
  • Как в Python найти, где было создано исключение
  • Как безопасно писать в файл?
  • Python3 Django -> HTML для PDF
  • GetWindowRect слишком мал для Windows 7
  • Python: Сокет и потоки?
  • Python: преобразование строки в метку времени с помощью микросекунд
  • Невозможно загрузить целевой WSGI-скрипт в качестве модуля Python
  • 4 Solutions collect form web for “JSON ValueError: Ожидание имени свойства: строка 1 столбец 2 (символ 1)”

    json.loads загрузит json-объект в python dict , json.dumps сбрасывает python dict на объект json, например:

     >>> json_string = '{"favorited": false, "contributors": null}' '{"favorited": false, "contributors": null}' >>> value = json.loads(json_string) {u'favorited': False, u'contributors': None} >>> json_dump = json.dumps(value) '{"favorited": false, "contributors": null}' 

    Так что эта строка неверна, так как вы пытаетесь load питон python, и json.loads ожидает действительный json object который должен иметь <type 'str'> .

    Поэтому, если вы пытаетесь загрузить json, вы должны изменить то, что вы загружаете, чтобы выглядеть как json_string выше, или вы должны его сбросить. Это только мое лучшее предположение из данной информации. Что вы пытаетесь достичь?

    Также вам не нужно указывать u перед вашими строками, как @Cld, упомянутое в комментариях.

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

    Я использую строку json с одинарными кавычками :

     { 'property': 1 } 

    Но json.loads принимает только двойные кавычки для json-свойств :

     { "property": 1 } 

    json.dumps с одинарными кавычками

    Чтобы легко использовать json.dumps с простыми котировками, вы можете использовать этот код:

     import ast import json data = json.dumps(ast.literal_eval(json_data_single_quote)) 

    одиночная кавычка JSON для двойных кавычек

    Вы можете использовать пакет ast (доступный в стандартной библиотеке Python 2 и 3) для этой обработки. Вот пример:

     import ast # ast.literal_eval() return a dict object, we must use json.dumps to get JSON string import json # Single quote to double with ast.literal_eval() json_data = "{'property': 'text'}" json_data = ast.literal_eval(json_data) print(json.dumps(json_data)) # Display : {"property": "text"} # ast.literal_eval() with double quotes json_data = '{"property": "text"}' json_data = ast.literal_eval(json_data) print(json.dumps(json_data)) # Display : {"property": "text"} 

    Надеюсь, это поможет

    1. заменить все одинарные кавычки на двойные кавычки
    2. замените 'u' 'из ваших строк на' '' … поэтому в основном конвертируйте внутренние юникоды в строки перед загрузкой строки в json

      >> strs = "{u'key':u'val'}"

      >> strs = strs.replace("'",'"')

      >> json.loads(strs.replace('u"',''))

    Все остальные ответы могут ответить на ваш запрос, но я столкнулся с той же проблемой, которая была вызвана бродягой , которую я добавил в конце моей строки json следующим образом:

    { "key":"123sdf", "bus_number":"asd234sdf", }

    Я, наконец, получил его работу, когда я удалил лишний , вот так:

    { "key":"123sdf", "bus_number":"asd234sdf" }

    Надеюсь, эта помощь! веселит.

    Python - лучший язык программирования в мире.