ValueError: Expected object or value when reading json as pandas dataframe
Solution 1:
I got the same error, read the function documentation and play around with different parameters.
I solved it by using the one below,
data= pd.read_json('Data.json', lines=True)
you can try out other things like
data= pd.read_json('Data.json', lines=True, orient='records')
data= pd.read_json('Data.json', orient=str)
Solution 2:
Your JSON is malformed.
ValueError: Expected object or value
can occur if you mistyped the file name. Does Data.json
exist? I noticed for your other attempts you used gdb.json
.
Once you confirm the file name is correct, you have to fix your JSON. What you have now is two disconnected records separated by a space. Lists in JSON must be valid arrays inside square brackets and separated by a comma: [{record1}, {record2}, ...]
Also, for pandas you should put your array under a root element called "data"
:
{ "data": [ {record1}, {record2}, ... ] }
Your JSON should end up looking like this:
{"data":
[{
"_id": "OzE5vaa3p7",
"categories": [
{
"__type": "Pointer",
"className": "Category",
"objectId": "nebCwWd2Fr"
}
],
"isActive": true,
"imageUrl": "https://firebasestorage.googleapis.com/v0/b/shopgro-1376.appspot.com/o/Barcode%20Data%20Upload%28II%29%2FAnil_puttu_flour_500g.png?alt=media&token=9cf63197-0925-4360-a31a-4675f4f46ae2",
"barcode": "8908001921015",
"isFmcg": true,
"itemName": "Anil puttu flour 500g",
"mrp": 58,
"_created_at": "2016-10-02T13:49:03.281Z",
"_updated_at": "2017-02-22T08:48:09.548Z"
}
,
{
"_id": "ENPCL8ph1p",
"categories": [
{
"__type": "Pointer",
"className": "Category",
"objectId": "B4nZeUHmVK"
}
],
"isActive": true,
"imageUrl": "https://firebasestorage.googleapis.com/v0/b/kirananearby-9eaa8.appspot.com/o/Barcode%20data%20upload%2FYippee_Magic_Masala_Noodles,_70_g.png?alt=media&token=d9e47bd7-f847-4d6f-9460-4be8dbcaae00",
"barcode": "8901725181222",
"isFmcg": true,
"itemName": "Yippee Magic Masala Noodles, 70 G",
"mrp": 12,
"_created_at": "2016-10-02T13:49:03.284Z",
"_updated_at": "2017-02-22T08:48:09.074Z"
}]}
Finally, pandas calls this format split orientation
, so you have to load it as follows:
df = pd.read_json('gdb.json', orient='split')
df
now contains the following data frame:
_id categories isActive imageUrl barcode isFmcg itemName mrp _created_at _updated_at
0 OzE5vaa3p7 [{'__type': 'Pointer', 'className': 'Category', 'objectI... True https://firebasestorage.googleapis.com/v0/b/shopgro-1376... 8908001921015 True Anil puttu flour 500g 58 2016-10-02 13:49:03.281000+00:00 2017-02-22 08:48:09.548000+00:00
1 ENPCL8ph1p [{'__type': 'Pointer', 'className': 'Category', 'objectI... True https://firebasestorage.googleapis.com/v0/b/kirananearby... 8901725181222 True Yippee Magic Masala Noodles, 70 G 12 2016-10-02 13:49:03.284000+00:00 2017-02-22 08:48:09.074000+00:00