dre*_*und 88 python json pymongo
我无法使用json.loads转换为dict对象,我无法弄清楚我做错了什么.我得到的确切错误是
ValueError: Expecting property name: line 1 column 2 (char 1)
Run Code Online (Sandbox Code Playgroud)
这是我的代码:
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)
Run Code Online (Sandbox Code Playgroud)
我很确定错误发生在第2行到最后一行
jsonTweet=json.loads({u'favorited': False, u'contributors': None})
Run Code Online (Sandbox Code Playgroud)
但我不知道该怎么做才能解决它.任何意见,将不胜感激.
Sam*_*zon 169
我遇到了另一个返回相同错误的问题.
我使用带单引号的json字符串:
{
'property': 1
}
Run Code Online (Sandbox Code Playgroud)
但json.loads只接受json属性的双引号:
{
"property": 1
}
Run Code Online (Sandbox Code Playgroud)
json.loads 不接受最后一个逗号:
{
"property": "text",
"property2": "text2",
}
Run Code Online (Sandbox Code Playgroud)
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"}
Run Code Online (Sandbox Code Playgroud)
使用ast将阻止您单引号和最终逗号问题.
要eval()轻松使用单引号,您可以使用以下代码:
import ast
import json
data = json.dumps(ast.literal_eval(json_data_single_quote))
Run Code Online (Sandbox Code Playgroud)
json.dumps 文件我希望它有所帮助.
Yep*_*_Me 78
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}'
Run Code Online (Sandbox Code Playgroud)
所以这行不正确,因为你正试图load蟒蛇dict,并json.loads期待一个有效的json string应该有<type 'str'>.
因此,如果您正在尝试加载json,您应该更改加载的内容,json_string如上所示,或者您应该转储它.这是我对给定信息的最佳猜测.你想要完成的是什么?
此外,您不需要u在字符串之前指定,如注释中提到的@Cld.
| 归档时间: |
|
| 查看次数: |
190430 次 |
| 最近记录: |