我在使用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})
但我不知道该怎么办才好。2如有任何建议,我将不胜感激。
6条答案
按热度按时间brccelvz1#
我遇到了另一个返回相同错误的问题。
单引号问题
我使用了一个带有单引号的json字符串:
但是**
json.loads
只接受json属性的双引号**:最终逗号问题
json.loads
不接受结尾逗号:溶液:
ast
解决单引号和结尾逗号问题你可以使用
ast
(Python 2和Python 3的标准库的一部分)来进行这个处理,下面是一个例子:使用
ast
可以像解释Python字典一样解释JSON,从而避免单引号和结尾逗号问题(因此必须遵循Python字典语法)。对于文本结构,它是eval()
函数的一个非常好且安全的替代方法。Python文档警告我们不要使用大的/复杂的字符串:
警告由于Python的AST编译器中的堆栈深度限制,一个足够大/复杂的字符串可能会导致Python解释器崩溃。
带单引号的json. dump
要轻松使用带单引号的
json.dumps
,可以使用以下代码:ast
文档ast Python 3 doc
ast Python 2 doc
工具
如果你经常编辑JSON,可以使用CodeBeautify,它可以帮助你修正语法错误,缩小/美化JSON。
wmtdaxz32#
json.loads
会将一个json字符串加载到pythondict
中,json.dumps
会将pythondict
转储到一个json字符串中,例如:所以这一行是不正确的,因为您正在尝试
load
一个pythondict
,而json.loads
需要一个有效的json string
,它应该有<type 'str'>
。所以如果你试图加载json,你应该把你加载的东西修改成像上面的
json_string
,或者你应该把它转储掉.这只是我从给定信息中最好的猜测.你想完成什么?此外,您不需要在字符串之前指定
u
,如注解中提到的@Cld。t98cgbkg3#
1.将所有单引号替换为双引号
1.将字符串中的'u”'替换为'"' ...所以在将字符串加载到JSON之前,基本上将内部unicode转换为字符串
4c8rllxm4#
所有其他答案可能回答您的查询,但我遇到了同样的问题,这是由于杂散的
,
,我添加在我的json字符串的末尾,如下所示:当我像这样删除额外的
,
时,我终于让它工作起来了:希望这个能帮上忙!干杯。
qpgpyjmq5#
使用AST,示例
hkmswyz66#
我遇到的另一个例子是,我使用
echo
将JSON通过管道传输到我的python脚本中,不小心将JSON字符串用双引号括起来:注意JSON字符串本身有引号,我应该这样做:
事实上,这就是python脚本收到的内容:
{thumbnailWidth: 640}
;双引号被有效地去除。