@@ -66,6 +66,38 @@ def author_missing_data():
66
66
}]
67
67
68
68
69
+ @pytest .fixture
70
+ def data_records_path_with_nested_data ():
71
+ return [{'CreatedBy' : {'Name' : 'User001' },
72
+ 'Lookup' : [{'TextField' : 'Some text' ,
73
+ 'UserField' : {'Id' : 'ID001' , 'Name' : 'Name001' }},
74
+ {'TextField' : 'Some text' ,
75
+ 'UserField' : {'Id' : 'ID001' , 'Name' : 'Name001' }}
76
+ ],
77
+ 'Image' : {'a' : 'b' },
78
+ 'random' : [{'foo' : 'something' , 'bar' : 'else' },
79
+ {'foo' : 'something2' , 'bar' : 'else2' }]
80
+ }]
81
+
82
+
83
+ def expected_data_for_test_records_path_with_nested_data ():
84
+ return {0 : [{"TextField" : "Some text" ,
85
+ 'UserField' : {'Id' : 'ID001' , 'Name' : 'Name001' },
86
+ "CreatedBy" : {"Name" : "User001" },
87
+ 'Image' : {'a' : 'b' }},
88
+ {"TextField" : "Some text" ,
89
+ 'UserField' : {'Id' : 'ID001' , 'Name' : 'Name001' },
90
+ "CreatedBy" : {"Name" : "User001" },
91
+ 'Image' : {'a' : 'b' }}],
92
+ 1 : [{"TextField" : "Some text" , "UserField.Id" : "ID001" ,
93
+ "UserField.Name" : "Name001" ,
94
+ "CreatedBy" : {"Name" : "User001" },
95
+ 'Image' : {'a' : 'b' }},
96
+ {"TextField" : "Some text" , "UserField.Id" : "ID001" ,
97
+ "UserField.Name" : "Name001" ,
98
+ "CreatedBy" : {"Name" : "User001" },
99
+ 'Image' : {'a' : 'b' }}]}
100
+
69
101
class TestJSONNormalize (object ):
70
102
71
103
def test_simple_records (self ):
@@ -277,55 +309,20 @@ def test_missing_field(self, author_missing_data):
277
309
expected = DataFrame (ex_data )
278
310
tm .assert_frame_equal (result , expected )
279
311
280
- def test_records_path_with_nested_data (self ):
281
- data = [{'CreatedBy' : {'Name' : 'User001' },
282
- 'Lookup' : [{'TextField' : 'Some text' ,
283
- 'UserField' : {'Id' : 'ID001' , 'Name' : 'Name001' }},
284
- {'TextField' : 'Some text' ,
285
- 'UserField' : {'Id' : 'ID001' , 'Name' : 'Name001' }}
286
- ],
287
- 'Image' : {'a' : 'b' },
288
- 'random' : [{'foo' : 'something' , 'bar' : 'else' },
289
- {'foo' : 'something2' , 'bar' : 'else2' }]
290
- }]
291
- ex_data_level_0 = [{"TextField" : "Some text" ,
292
- 'UserField' : {'Id' : 'ID001' , 'Name' : 'Name001' },
293
- "CreatedBy" : {"Name" : "User001" },
294
- 'Image' : {'a' : 'b' }},
295
- {"TextField" : "Some text" ,
296
- 'UserField' : {'Id' : 'ID001' , 'Name' : 'Name001' },
297
- "CreatedBy" : {"Name" : "User001" },
298
- 'Image' : {'a' : 'b' }}]
299
-
300
- expected_level_0 = DataFrame (ex_data_level_0 ,
301
- columns = ['TextField' , 'UserField' ,
302
- 'CreatedBy' , "Image" ])
303
- result_level_0 = json_normalize (data , record_path = ["Lookup" ],
304
- meta = [["CreatedBy" ], ["Image" ]],
305
- max_level = 0 )
306
-
307
- ex_data_level_1 = [{"TextField" : "Some text" , "UserField.Id" : "ID001" ,
308
- "UserField.Name" : "Name001" ,
309
- "CreatedBy" : {"Name" : "User001" },
310
- 'Image' : {'a' : 'b' }},
311
- {"TextField" : "Some text" , "UserField.Id" : "ID001" ,
312
- "UserField.Name" : "Name001" ,
313
- "CreatedBy" : {"Name" : "User001" },
314
- 'Image' : {'a' : 'b' }}]
315
-
316
- expected_level_1 = DataFrame (ex_data_level_1 ,
317
- columns = ['TextField' ,
318
- 'UserField.Id' ,
319
- 'UserField.Name' ,
320
- 'CreatedBy' ,
321
- "Image" ]
322
- )
323
- result_level_1 = json_normalize (data , record_path = ["Lookup" ],
324
- meta = [["CreatedBy" ], ["Image" ]],
325
- max_level = 1 )
326
-
327
- tm .assert_frame_equal (expected_level_0 , result_level_0 )
328
- tm .assert_frame_equal (expected_level_1 , result_level_1 )
312
+ @pytest .mark .parametrize ("max_level, columns" , [
313
+ (0 , ['TextField' , 'UserField' , 'CreatedBy' , "Image" ] ),
314
+ (1 , ['TextField' , 'UserField.Id' , 'UserField.Name' , 'CreatedBy' , "Image" ]),
315
+ ])
316
+ def test_records_path_with_nested_data (self , data_records_path_with_nested_data ,
317
+ max_level , columns ):
318
+ test_input = data_records_path_with_nested_data
319
+ expected_data = expected_data_for_test_records_path_with_nested_data ()[max_level ]
320
+ result = json_normalize (test_input ,
321
+ record_path = ["Lookup" ],
322
+ meta = [["CreatedBy" ], ["Image" ]],
323
+ max_level = max_level )
324
+ expected_df = DataFrame (data = expected_data , columns = columns )
325
+ tm .assert_frame_equal (expected_df , result )
329
326
330
327
331
328
class TestNestedToRecord (object ):
0 commit comments