Saya mengalami masalah dalam menggunakan json.loads untuk mengonversi ke objek dict dan saya tidak tahu apa yang saya lakukan salah.
ValueError: Expecting property name: line 1 column 2 (char 1)
Ini kode saya:
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)
Saya cukup yakin bahwa kesalahan terjadi pada baris ke-2 hingga terakhir
jsonTweet=json.loads({u'favorited': False, u'contributors': None})
tapi saya tidak tahu harus berbuat apa untuk memperbaikinya. Nasihat apa pun akan dihargai.
"
itu kesalahan salin tempel?print tweet.message.value
?ValueError
adalah mengirim karena kesalahan dalam input JSON, bukan masalah dalam kode Anda. (Selain yang hilang"
yang biasanya harus mengirimSyntaxError
jadi saya anggap itu hanya kesalahan salin tempel.)Jawaban:
json.loads
akan memuat string json ke dalam pythondict
,json.dumps
akan membuang pythondict
ke string json, misalnya:Jadi baris itu salah karena Anda mencoba
load
pythondict
, danjson.loads
mengharapkan validjson string
yang seharusnya ada<type 'str'>
.Jadi jika Anda mencoba memuat json, Anda harus mengubah apa yang Anda muat agar terlihat seperti di
json_string
atas, atau Anda harus membuangnya. Ini hanya tebakan terbaik saya dari informasi yang diberikan. Apa yang ingin Anda capai?Anda juga tidak perlu menentukan
u
sebelum string Anda, seperti yang disebutkan @Cld di komentar.sumber
Saya mengalami masalah lain yang mengembalikan kesalahan yang sama.
Masalah kutipan tunggal
Saya menggunakan string json dengan tanda kutip tunggal :
Tetapi
json.loads
hanya menerima tanda kutip ganda untuk properti json :Masalah koma terakhir
json.loads
tidak menerima koma terakhir:Solusi:
ast
untuk menyelesaikan masalah kutipan tunggal dan koma terakhirAnda dapat menggunakan
ast
(bagian dari pustaka standar untuk Python 2 dan 3) untuk pemrosesan ini. Berikut ini contohnya:Menggunakan
ast
akan mencegah Anda dari kutipan tunggal dan masalah koma terakhir dengan menafsirkan JSON seperti kamus Python (jadi Anda harus mengikuti sintaks kamus Python). Ini adalah alternatifeval()
fungsi yang cukup bagus dan aman untuk struktur literal.Dokumentasi Python memperingatkan kita untuk menggunakan string besar / kompleks:
json.dumps dengan tanda kutip tunggal
Untuk menggunakan
json.dumps
dengan tanda kutip tunggal dengan mudah Anda dapat menggunakan kode ini:ast
dokumentasiast Python 3 dokumen
ast Python 2 dokumen
Alat
Jika Anda sering mengedit JSON, Anda dapat menggunakan CodeBeautify . Ini membantu Anda memperbaiki kesalahan sintaks dan meminimalkan / mempercantik JSON.
Saya harap ini membantu.
sumber
sumber
Semua jawaban lain dapat menjawab pertanyaan Anda, tetapi saya menghadapi masalah yang sama yang disebabkan oleh nyasar
,
yang saya tambahkan di akhir string json saya seperti ini:Saya akhirnya berhasil saat saya menghapus ekstra
,
seperti ini:Semoga bantuan ini! Bersulang.
sumber
digunakan ast, contoh
sumber
Kasus berbeda yang saya temui adalah ketika saya menggunakan
echo
untuk menyalurkan JSON ke skrip python saya dan secara sembarangan membungkus string JSON dalam tanda kutip ganda:Perhatikan bahwa string JSON itu sendiri memiliki tanda kutip dan saya harus melakukannya:
Seperti itu, ini adalah apa script python yang diterima:
{thumbnailWidth: 640}
; tanda kutip ganda secara efektif dihapus.sumber