Skip to content

Commit 68dda2f

Browse files
arhamchopraCarreau
authored andcommitted
Merge pull request #192 from Point72/ac/parse_none_to_json
Parse None natively in to_json method
2 parents cc60b87 + f6b0963 commit 68dda2f

File tree

2 files changed

+22
-5
lines changed

2 files changed

+22
-5
lines changed

cpp/csp/python/PyStructToJson.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -285,7 +285,11 @@ rapidjson::Value pyDictToJson( PyObject * py_dict, rapidjson::Document& doc, PyO
285285

286286
rapidjson::Value pyObjectToJson( PyObject * value, rapidjson::Document& doc, PyObject * callable, bool is_recursing )
287287
{
288-
if( PyBool_Check( value ) )
288+
if( value == Py_None )
289+
{
290+
return rapidjson::Value();
291+
}
292+
else if( PyBool_Check( value ) )
289293
{
290294
return rapidjson::Value( fromPython<bool>( value ) );
291295
}

csp/tests/impl/test_struct.py

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1451,8 +1451,13 @@ class MyStruct(csp.Struct):
14511451
result_dict = {"i": 456, "l_any": [[1, None], [None, None]]}
14521452
self.assertEqual(json.loads(test_struct.to_json()), result_dict)
14531453

1454-
l_any = [[1, 2], "hello", [4, 3.2, [6, [7], (8, True, 10.5, (11, [float("nan"), False]))]]]
1455-
l_any_result = [[1, 2], "hello", [4, 3.2, [6, [7], [8, True, 10.5, [11, [None, False]]]]]]
1454+
l_any = [[None], None, [1, 2, None]]
1455+
test_struct = MyStruct(i=456, l_any=l_any)
1456+
result_dict = {"i": 456, "l_any": l_any}
1457+
self.assertEqual(json.loads(test_struct.to_json()), result_dict)
1458+
1459+
l_any = [[1, 2], "hello", [4, 3.2, [6, [7], (None, True, 10.5, (11, [float("nan"), None, False]))]]]
1460+
l_any_result = [[1, 2], "hello", [4, 3.2, [6, [7], [None, True, 10.5, [11, [None, None, False]]]]]]
14561461
test_struct = MyStruct(i=456, l_any=l_any)
14571462
result_dict = {"i": 456, "l_any": l_any_result}
14581463
self.assertEqual(json.loads(test_struct.to_json()), result_dict)
@@ -1511,8 +1516,16 @@ class MyStruct(csp.Struct):
15111516
result_dict = json.loads(test_struct.to_json())
15121517
self.assertEqual({k: datetime.fromisoformat(d) for k, d in result_dict["d_any"].items()}, d_dt)
15131518

1514-
d_any = {"b1": {1: "k1", "d2": {4: 5.5}}, "b2": {"d3": {}, "d4": {"d5": {"d6": {"d7": {}}}}}}
1515-
d_any_res = {"b1": {"1": "k1", "d2": {"4": 5.5}}, "b2": {"d3": {}, "d4": {"d5": {"d6": {"d7": {}}}}}}
1519+
d_any = {
1520+
"b1": {1: "k1", "d2": {4: 5.5}},
1521+
"b2": {"d3": {}, "d4": {"d5": {"d6": {"d7": {}}}}, "d8": None},
1522+
"b3": None,
1523+
}
1524+
d_any_res = {
1525+
"b1": {"1": "k1", "d2": {"4": 5.5}},
1526+
"b2": {"d3": {}, "d4": {"d5": {"d6": {"d7": {}}}}, "d8": None},
1527+
"b3": None,
1528+
}
15161529
test_struct = MyStruct(i=456, d_any=d_any)
15171530
result_dict = {"i": 456, "d_any": d_any_res}
15181531
self.assertEqual(json.loads(test_struct.to_json()), result_dict)

0 commit comments

Comments
 (0)