我在使用 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})
但我不知道该怎么做才能修复它。任何建议将不胜感激。
最佳答案
我遇到了另一个返回相同错误的问题。
我使用了带有 单引号的 json 字符串:
{
'property': 1
}
但是 json.loads
只接受 json 属性的双引号:
{
"property": 1
}
json.loads
不接受最后的逗号:
{
"property": "text",
"property2": "text2",
}
ast
解决单引号和尾逗号问题您可以使用 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))
# Displays : {"property": "text"}
# ast.literal_eval() with double quotes
json_data = '{"property": "text"}'
json_data = ast.literal_eval(json_data)
print(json.dumps(json_data))
# Displays : {"property": "text"}
# ast.literal_eval() with final coma
json_data = "{'property': 'text', 'property2': 'text2',}"
json_data = ast.literal_eval(json_data)
print(json.dumps(json_data))
# Displays : {"property2": "text2", "property": "text"}
使用 ast
将通过像 Python 字典一样插入 JSON 来防止单引号和逗号问题(因此您必须遵循 Python 字典语法)。对于文字结构,它是 eval()
函数的一个很好且安全的替代方案。
Python documentation警告我们使用大/复杂的字符串:
Warning It is possible to crash the Python interpreter with a sufficiently large/complex string due to stack depth limitations in Python’s AST compiler.
要轻松使用带有单引号的 json.dumps
,您可以使用以下代码:
import ast
import json
data = json.dumps(ast.literal_eval(json_data_single_quote))
ast
文档ast Python 3 doc
ast Python 2 doc
如果你经常编辑 JSON,你可以使用 CodeBeautify .它可以帮助您修复语法错误并缩小/美化 JSON。
希望对你有帮助。
关于python - JSON 值错误 : Expecting property name: line 1 column 2 (char 1),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25707558/