JSONDecodeError khi tải tệp json [trùng lặp]
Cho một tệp json test.jsonvới nội dung như sau:
{'review/appearance': 2.5, 'beer/style': 'Hefeweizen', 'review/palate': 1.5, 'review/taste': 1.5, 'beer/name': 'Sausa Weizen', 'review/timeUnix': 1234817823, 'beer/ABV': 5.0, 'beer/beerId': '47986', 'beer/brewerId': '10325', 'review/timeStruct': {'isdst': 0, 'mday': 16, 'hour': 20, 'min': 57, 'sec': 3, 'mon': 2, 'year': 2009, 'yday': 47, 'wday': 0}, 'review/overall': 1.5, 'review/text': 'A lot of foam. But a lot.\tIn the smell some banana, and then lactic and tart. Not a good start.\tQuite dark orange in color, with a lively carbonation (now visible, under the foam).\tAgain tending to lactic sourness.\tSame for the taste. With some yeast and banana.', 'user/profileName': 'stcules', 'review/aroma': 2.0}
{'review/appearance': 3.0, 'beer/style': 'English Strong Ale', 'review/palate': 3.0, 'review/taste': 3.0, 'beer/name': 'Red Moon', 'review/timeUnix': 1235915097, 'beer/ABV': 6.2, 'beer/beerId': '48213', 'beer/brewerId': '10325', 'review/timeStruct': {'isdst': 0, 'mday': 1, 'hour': 13, 'min': 44, 'sec': 57, 'mon': 3, 'year': 2009, 'yday': 60, 'wday': 6}, 'review/overall': 3.0, 'review/text': 'Dark red color, light beige foam, average.\tIn the smell malt and caramel, not really light.\tAgain malt and caramel in the taste, not bad in the end.\tMaybe a note of honey in teh back, and a light fruitiness.\tAverage body.\tIn the aftertaste a light bitterness, with the malt and red fruit.\tNothing exceptional, but not bad, drinkable beer.', 'user/profileName': 'stcules', 'review/aroma': 2.5}
{'review/appearance': 3.0, 'beer/style': 'Foreign / Export Stout', 'review/palate': 3.0, 'review/taste': 3.0, 'beer/name': 'Black Horse Black Beer', 'review/timeUnix': 1235916604, 'beer/ABV': 6.5, 'beer/beerId': '48215', 'beer/brewerId': '10325', 'review/timeStruct': {'isdst': 0, 'mday': 1, 'hour': 14, 'min': 10, 'sec': 4, 'mon': 3, 'year': 2009, 'yday': 60, 'wday': 6}, 'review/overall': 3.0, 'review/text': 'Almost totally black. Beige foam, quite compact, not bad.\tLight smell, just a bit of roast, and some hop. A bit too light.\tThe taste is light oo, and drinkable, with some malt, roast, hints of coffee.\tNothing exceptional, but after all drinkable and pleasant.\tLight to average body.\tIn the aftertaste some dust, somr roast, hint of caramel, and a bit of bitterness.\tNo defect, drinkable, not bad.', 'user/profileName': 'stcules', 'review/aroma': 2.5}
Tôi đã tải tệp với mã sau:
import json
with open('./test.json', 'r') as json_file:
data = json.load(json_file)
Nhưng nó đặt ra một lỗi: JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 2 (char 1).
Một lựa chọn khác:
data = json.loads('./test.json')
print(data)
Đầu ra:
JSONDecodeError: Expecting value: line 1 column 1 (char 0)
Làm thế nào tôi có thể làm điều đó chính xác? Rất cám ơn trước.
Trả lời
Có 2 vấn đề trong JSON.
- Dấu ngoặc mảng bị thiếu
[] - Sửa đổi
'thành"
JSON chính xác:
[{
"review/appearance": 2.5,
"beer/style": "Hefeweizen",
"review/palate": 1.5,
"review/taste": 1.5,
"beer/name": "Sausa Weizen",
"review/timeUnix": 1234817823,
"beer/ABV": 5.0,
"beer/beerId": "47986",
"beer/brewerId": "10325",
"review/timeStruct": {
"isdst": 0,
"mday": 16,
"hour": 20,
"min": 57,
"sec": 3,
"mon": 2,
"year": 2009,
"yday": 47,
"wday": 0
},
"review/overall": 1.5,
"review/text": "A lot of foam. But a lot.\tIn the smell some banana, and then lactic and tart. Not a good start.\tQuite dark orange in color, with a lively carbonation (now visible, under the foam).\tAgain tending to lactic sourness.\tSame for the taste. With some yeast and banana.",
"user/profileName": "stcules",
"review/aroma": 2.0
}, {
"review/appearance": 3.0,
"beer/style": "English Strong Ale",
"review/palate": 3.0,
"review/taste": 3.0,
"beer/name": "Red Moon",
"review/timeUnix": 1235915097,
"beer/ABV": 6.2,
"beer/beerId": "48213",
"beer/brewerId": "10325",
"review/timeStruct": {
"isdst": 0,
"mday": 1,
"hour": 13,
"min": 44,
"sec": 57,
"mon": 3,
"year": 2009,
"yday": 60,
"wday": 6
},
"review/overall": 3.0,
"review/text": "Dark red color, light beige foam, average.\tIn the smell malt and caramel, not really light.\tAgain malt and caramel in the taste, not bad in the end.\tMaybe a note of honey in teh back, and a light fruitiness.\tAverage body.\tIn the aftertaste a light bitterness, with the malt and red fruit.\tNothing exceptional, but not bad, drinkable beer.",
"user/profileName": "stcules",
"review/aroma": 2.5
}, {
"review/appearance": 3.0,
"beer/style": "Foreign / Export Stout",
"review/palate": 3.0,
"review/taste": 3.0,
"beer/name": "Black Horse Black Beer",
"review/timeUnix": 1235916604,
"beer/ABV": 6.5,
"beer/beerId": "48215",
"beer/brewerId": "10325",
"review/timeStruct": {
"isdst": 0,
"mday": 1,
"hour": 14,
"min": 10,
"sec": 4,
"mon": 3,
"year": 2009,
"yday": 60,
"wday": 6
},
"review/overall": 3.0,
"review/text": "Almost totally black. Beige foam, quite compact, not bad.\tLight smell, just a bit of roast, and some hop. A bit too light.\tThe taste is light oo, and drinkable, with some malt, roast, hints of coffee.\tNothing exceptional, but after all drinkable and pleasant.\tLight to average body.\tIn the aftertaste some dust, somr roast, hint of caramel, and a bit of bitterness.\tNo defect, drinkable, not bad.",
"user/profileName": "stcules",
"review/aroma": 2.5
}]
đây không phải là tệp json. Có vẻ như ndjson nhìn vào gói của bên thứ ba ndjson
Ngoài ra, nó nên sử dụng dấu ngoặc kép, không phải dấu ngoặc kép.
Nếu đây là tệp bạn tạo hoặc có thể thay đổi - bạn có thể đặt 3 đối tượng JSON này vào mảng JSON và khi đó t sẽ là JSON hợp lệ.
Vấn đề là tệp của bạn không phải là JSON hợp lệ. Bạn cần dấu ngoặc kép thay vì dấu nháy đơn xung quanh chuỗi của mình và bạn cần đặt ba đối tượng của mình bên trong một mảng.
Hãy thử cái này thay thế:
[
{"review/appearance": 2.5, "beer/style": "Hefeweizen", "review/palate": 1.5, "review/taste": 1.5, "beer/name": "Sausa Weizen", "review/timeUnix": 1234817823, "beer/ABV": 5.0, "beer/beerId": "47986", "beer/brewerId": "10325", "review/timeStruct": {"isdst": 0, "mday": 16, "hour": 20, "min": 57, "sec": 3, "mon": 2, "year": 2009, "yday": 47, "wday": 0}, "review/overall": 1.5, "review/text": "A lot of foam. But a lot.\tIn the smell some banana, and then lactic and tart. Not a good start.\tQuite dark orange in color, with a lively carbonation (now visible, under the foam).\tAgain tending to lactic sourness.\tSame for the taste. With some yeast and banana.", "user/profileName": "stcules", "review/aroma": 2.0},
{"review/appearance": 3.0, "beer/style": "English Strong Ale", "review/palate": 3.0, "review/taste": 3.0, "beer/name": "Red Moon", "review/timeUnix": 1235915097, "beer/ABV": 6.2, "beer/beerId": "48213", "beer/brewerId": "10325", "review/timeStruct": {"isdst": 0, "mday": 1, "hour": 13, "min": 44, "sec": 57, "mon": 3, "year": 2009, "yday": 60, "wday": 6}, "review/overall": 3.0, "review/text": "Dark red color, light beige foam, average.\tIn the smell malt and caramel, not really light.\tAgain malt and caramel in the taste, not bad in the end.\tMaybe a note of honey in teh back, and a light fruitiness.\tAverage body.\tIn the aftertaste a light bitterness, with the malt and red fruit.\tNothing exceptional, but not bad, drinkable beer.", "user/profileName": "stcules", "review/aroma": 2.5},
{"review/appearance": 3.0, "beer/style": "Foreign / Export Stout", "review/palate": 3.0, "review/taste": 3.0, "beer/name": "Black Horse Black Beer", "review/timeUnix": 1235916604, "beer/ABV": 6.5, "beer/beerId": "48215", "beer/brewerId": "10325", "review/timeStruct": {"isdst": 0, "mday": 1, "hour": 14, "min": 10, "sec": 4, "mon": 3, "year": 2009, "yday": 60, "wday": 6}, "review/overall": 3.0, "review/text": "Almost totally black. Beige foam, quite compact, not bad.\tLight smell, just a bit of roast, and some hop. A bit too light.\tThe taste is light oo, and drinkable, with some malt, roast, hints of coffee.\tNothing exceptional, but after all drinkable and pleasant.\tLight to average body.\tIn the aftertaste some dust, somr roast, hint of caramel, and a bit of bitterness.\tNo defect, drinkable, not bad.", "user/profileName": "stcules", "review/aroma": 2.5}
]
Nhân tiện, obj = json.loads('./test.json')sẽ không hoạt động, như json.loadsmong đợi một chuỗi JSON, không phải đường dẫn tệp hoặc đối tượng tệp. ( loadslà viết tắt của "load string".) Bạn muốn json.loadthay thế.
Tệp không phải là json. Điều này đã được hỏi trước đây ở đây
JSON không sử dụng 'dấu ngoặc kép, thay vào đó họ sử dụng dấu ngoặc kép"