我在使用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.loads
将json字符串加载到python中,dict
,json.dumps
将pythondict
转储到json字符串,例如:所以这一行是不正确的,因为您试图
load
一个pythondict
,而json.loads
需要一个有效的json string
,它应该有<type 'str'>
。因此,如果您试图加载json,您应该将所加载的内容更改为上面的
json_string
格式,或者应该转储它。这只是我从给定信息中最好的猜测。你想完成什么?此外,您不需要像@Cld在注释中提到的那样,在字符串之前指定
u
。我遇到了另一个返回相同错误的问题。
单报价问题
我使用了带有单引号的json字符串:
但是,{}只接受json属性的双引号:
最后一个逗号问题
json.loads
不接受最后一个逗号:解决方案:
ast
解决单引号和最后逗号问题您可以使用
ast
(Python 2和3的标准库的一部分)进行此处理。下面是一个例子:使用
ast
将通过设置类似于JSON的Python措辞(因此必须遵循Python措辞语法)来防止出现单引号和最后逗号问题。它是文本结构的eval()
函数的一个非常好且安全的替代方法。Python documentation警告我们不要使用大型/复杂字符串:
带单引号的json.dumps
要方便地将
json.dumps
与单引号一起使用,可以使用以下代码:ast
文档ast Python 3 doc
ast Python 2 doc
工具
如果经常编辑JSON,可以使用CodeBeautify。它帮助您修复语法错误并缩小/美化JSON。
我希望有帮助。
相关问题 更多 >
编程相关推荐