JSON Object to CSV Question
Saran Ahluwalia
ahlusar.ahluwalia at gmail.com
Fri Jun 19 16:00:22 EDT 2015
My answers are below in red.
On Fri, Jun 19, 2015 at 2:47 PM, Joonas Liik <liik.joonas at gmail.com> wrote:
>
> You say you are taking this from an xml file and want to get a CSV file..
>
> Why are you making an intermediate JSON file?
>
I thought that this would be the most efficient method as it emulates
Python dictionaries. In addition the json module has numerous functional
purposes.
> Why do you need the CSV output?
>
Client requirements
Could you perhaps be better off using another format?
>
Perhaps...not sure if it worth revisiting at this point.
>
> Your data seems to be a quite deeply nested hierarchical structure and
> doesn't
> seem to suit the simple CSV format very well.. (i see several layers of
> nested arrays for one)..
> how to you plan to map these nested structures to the CSV format?
>
>
That's my greatest challenge. From what I understand, I need to replicate
each key and associate it with n number of items in the array. I have been
able to address by denesting by one level using this function:
1. def flatten(d, parent_key=''):
2. items = []
3. for k, v in d.items():
4. try:
5. items.extend(flatten(v, '%s%s_' % (parent_key, k)).items())
6. except AttributeError:
7. items.append(('%s%s' % (parent_key, k), v))
8. return dict(items)
9.
10. final = (flatten(data2, parent_key =''))
For example:
1. data2 = {
2.
3. "OTF": "0",
4. "F": "False",
5. "F": {
6. "Int32": ["0",
7. "0",
8. "0",
9. "0",
10. "0",
11. "0",
12. "0",
13. "0",
14. "0",
15. "0",
16. "0",
17. "0",
18. "0",
19. "0",
20. "0",
21. "0",
22. "0",
23. "0",
24. "0",
25. "0",
26. "0",
27. "0",
28. "0",
29. "0",
30. "0"]
31. },
32. "D": {
33. "B": ["0",
34. "0",
35. "0",
36. "0",
37. "0",
38. "0",
39. "0",
40. "0",
41. "0",
42. "0",
43. "0"]
44. },
45.
46. "PBDS": {
47. "DateTime": ["1/1/0001 12:00:00 AM",
48. "1/1/0001 12:00:00 AM",
49. "1/1/0001 12:00:00 AM",
50. "1/1/0001 12:00:00 AM",
51. "1/1/0001 12:00:00 AM",
52. "1/1/0001 12:00:00 AM",
53. "1/1/0001 12:00:00 AM",
54. "1/1/0001 12:00:00 AM"]
55. },
56.
57. "PBDS": {
58. "Double": ["0",
59. "0",
60. "0",
61. "0",
62. "0",
63. "0",
64. "0",
65. "0"]
66. },
67.
68. "SCS": {
69. "String": ["1",
70. "2"]
71. }
72.
73. }
is turned into
1. {'D_B': ['0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'],
2. 'F_Int32': ['0',
3. '0',
4. '0',
5. '0',
6. '0',
7. '0',
8. '0',
9. '0',
10. '0',
11. '0',
12. '0',
13. '0',
14. '0',
15. '0',
16. '0',
17. '0',
18. '0',
19. '0',
20. '0',
21. '0',
22. '0',
23. '0',
24. '0',
25. '0',
26. '0'],
27. 'OTF': '0',
28. 'PBDS_Double': ['0', '0', '0', '0', '0', '0', '0', '0'],
29. 'SCS_String': ['1', '2']}
I would need an output that maps each key with each item in the array.
DB1 : 0, DB2: 0, DB3: 0 etc. and F1: 0, F1: 0. DB1, DB2 would be the
headers and the 0s as values in the CSV file.
> And your example json bit.. the JSON you posted in your last post seems
> quite different from some of the first ones you posted.
>
> You cant expect to give people 5% of a malformed simplified example and to
> get anything useful (much less usable) back.
>
> And finally, the original xml? mock at least?
>
All of our XML from our client is malformed.
>
>
>
>
> --
> https://mail.python.org/mailman/listinfo/python-list
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-list/attachments/20150619/53fe677a/attachment.html>
More information about the Python-list
mailing list