diff --git a/scrapy/utils/serialize.py b/scrapy/utils/serialize.py index 8320be095..9dd72ea71 100644 --- a/scrapy/utils/serialize.py +++ b/scrapy/utils/serialize.py @@ -14,7 +14,9 @@ class ScrapyJSONEncoder(json.JSONEncoder): TIME_FORMAT = "%H:%M:%S" def default(self, o): - if isinstance(o, datetime.datetime): + if isinstance(o, set): + return list(o) + elif isinstance(o, datetime.datetime): return o.strftime("%s %s" % (self.DATE_FORMAT, self.TIME_FORMAT)) elif isinstance(o, datetime.date): return o.strftime(self.DATE_FORMAT) diff --git a/tests/test_utils_serialize.py b/tests/test_utils_serialize.py index 278cf91e3..6dc117779 100644 --- a/tests/test_utils_serialize.py +++ b/tests/test_utils_serialize.py @@ -23,9 +23,14 @@ class JsonEncoderTestCase(unittest.TestCase): ts = "10:11:12" dec = Decimal("1000.12") decs = "1000.12" + s = {'foo'} + ss = ['foo'] + dt_set = {dt} + dt_sets = [dts] for input, output in [('foo', 'foo'), (d, ds), (t, ts), (dt, dts), - (dec, decs), (['foo', d], ['foo', ds])]: + (dec, decs), (['foo', d], ['foo', ds]), (s, ss), + (dt_set, dt_sets)]: self.assertEqual(self.encoder.encode(input), json.dumps(output)) def test_encode_deferred(self):