import shapefile
from json import dumps

sf = shapefile.Reader("pyshp/shapefiles/blockgroups")

fields = sf.fields[1:]
field_names = [field[0] for field in fields]

buffer = []
for sr in sf.shapeRecords():
   atr = dict(zip(field_names, sr.record))

   geom = sr.shape.__geo_interface__
   buffer.append(dict(type="Feature", geometry=geom, properties=atr)) 

geojson = open("pyshp-demo.geojson", "w")
geojson.write(dumps({"type": "FeatureCollection",\
"features": buffer}, indent=2) + "\n")
geojson.close()