|
1 |
| -# jsoncsv |
2 |
| -将多层次的json转为一层次的json,再转成csv或者xlsx |
| 1 | +# jsoncsv |
3 | 2 |
|
4 |
| -**展开为1层json** |
| 3 | +将多层次的json转为一层次的json,再转成csv或者xlsx 的工具 |
5 | 4 |
|
6 | 5 | ```
|
7 |
| -echo '{"s":[1,2,{"w":1}]}'|./jsoncsv.py -e |jq -r '' |
8 |
| -{ |
9 |
| - "s.2.w": 1, |
10 |
| - "s.0": 1, |
11 |
| - "s.1": 2 |
12 |
| -} |
| 6 | +cat raw.json|jsoncsv|mkexcel > output.csv |
| 7 | +cat raw.json|jsoncsv|mkexcel -t xls > output. xls |
13 | 8 | ```
|
14 |
| -**制作xlsx** |
15 | 9 |
|
16 |
| -``` |
17 |
| -cat raw.json|./jsoncsv.py -e |./mkexcel.py > test.csv |
18 |
| -cat raw.json|./jsoncsv.py -e |./mkexcel.py -t xls > test.xls |
19 |
| -``` |
20 |
| - |
21 |
| - |
22 |
| - |
23 |
| -## 来源说明 |
24 |
| -因为做爬虫时,经常数据是json 格式的,而很多**客户需要看excel 的,需要耗费人力去填表格。 |
25 |
| - |
26 |
| -这两个文件可以连用,可以从原始json(可以用 `jq` 先做一些处理)到csv/xlsx一步完成。 |
27 |
| - |
28 |
| -最后再根据具体含义,更改xlsx文件的标题,使有明确含义 |
29 |
| - |
30 |
| -## 功能介绍 |
31 |
| - |
32 |
| -jsoncsv.expand 展开 多层json |
33 |
| -jsoncsv.restore 重构 单层json |
34 | 10 |
|
35 |
| -mkexcel 代码暂时还没有分割清楚 |
36 |
| - |
37 |
| - |
38 |
| -### 展开 expand 与 restore 重构 |
39 |
| - **jsoncsv.expand** 函数 展开 |
| 11 | +## 1. jsoncsv |
40 | 12 |
|
| 13 | +```bash |
| 14 | +echo '{"s":[1,2,{"w":1}]}'|jsoncsv |
| 15 | +{"s.2.w": 1,"s.0": 1,"s.1": 2} |
41 | 16 | ```
|
42 |
| -echo '[1,2,3,4]'|./jsoncsv.py -e |
43 |
| -{"1": 2, "0": 1, "3": 4, "2": 3} |
44 |
| -
|
45 |
| -echo '"sss"'|./jsoncsv.py -e |
46 |
| -{"": "sss"} |
47 |
| -
|
48 |
| - echo '1'|./jsoncsv.py -e |
49 |
| -{"": 1} |
50 |
| -
|
51 |
| -echo '{"s":[1,2,{"w":1}]}'|./jsoncsv.py -e |
52 |
| -{"s.2.w": 1, "s.0": 1, "s.1": 2} |
53 | 17 |
|
54 |
| -``` |
| 18 | +### -e -r |
55 | 19 |
|
56 |
| -**jsoncsv.restore** 恢复 |
57 |
| - |
58 |
| -每一组第一行是展开,第二行是对展开的结果重构,注意结果对比原始数据 |
| 20 | +`-e`,`--expand` expand 展开 json 数据 |
59 | 21 |
|
60 | 22 | ```
|
61 |
| -echo '[1,2,3,4]'|./jsoncsv.py -e |
62 |
| -{"1": 2, "0": 1, "3": 4, "2": 3} |
63 |
| -echo '[1,2,3,4]'|./jsoncsv.py -e|./jsoncsv.py -r |
64 |
| -[1, 2, 3, 4] |
65 |
| -
|
66 |
| -echo '1'|./jsoncsv.py -e |
67 |
| -
|
68 |
| -{"": 1} |
69 |
| -echo '1'|./jsoncsv.py -e|./jsoncsv.py -r |
70 |
| -1 |
71 |
| -
|
72 |
| -echo '"sss"'|./jsoncsv.py -e |
73 |
| -{"": "sss"} |
74 |
| -echo '"sss"'|./jsoncsv.py -e|./jsoncsv.py -r |
75 |
| -"sss" |
76 |
| -
|
77 |
| -echo '{"s":[1,2,{"w":1}]}'|./jsoncsv.py -e |
78 |
| -
|
79 |
| -{"s.2.w": 1, "s.0": 1, "s.1": 2} |
80 |
| -echo '{"s":[1,2,{"w":1}]}'|./jsoncsv.py -e|./jsoncsv.py -r |
81 |
| -{"s": [1, 2, {"w": 1}]} |
| 23 | +jsoncsv -e raw.json |
| 24 | +{"s":[1,2,{"w":1}]} ----> {"s.2.w": 1,"s.0": 1,"s.1": 2} |
| 25 | +``` |
| 26 | +`-r`,`--restore` restore 重构被展开的json |
82 | 27 |
|
| 28 | +``` |
| 29 | +jsoncsv -r expand.json |
| 30 | +{"s.2.w": 1,"s.0": 1,"s.1": 2} ----> {"s": [1, 2, {"w": 1}]} |
83 | 31 | ```
|
84 | 32 |
|
| 33 | +### -s |
85 | 34 |
|
86 |
| -如上,将各种类型的json数据转化层单层的 |
87 |
| -#### 此版本要求 |
88 |
| -1. 原始json 的 各级key不能包含".",因为`.`是expand后key的连接字符。 |
89 |
| -2. 字典key中不能混杂数字。如果全部的key都是数字,恢复重构时会被当成list类型。 |
| 35 | + `-s`,`--separator` default is `.` |
90 | 36 |
|
91 |
| -例如 |
| 37 | +## 2.mkexcel |
92 | 38 |
|
93 | 39 | ```
|
94 |
| -echo '{"0":1,"2":[1,2]}'|./jsoncsv.py -e |
95 |
| -{"0": 1, "2.1": 2, "2.0": 1} |
96 |
| -
|
97 |
| -echo '{"0":1,"2":[1,2]}'|./jsoncsv.py -e|./jsoncsv.py -r |
98 |
| -[1, [1, 2]] |
| 40 | +cat expand.json|mkexcel -o output.csv |
| 41 | +cat expnad.json|mkexcel -t xls > output.xls |
99 | 42 | ```
|
100 |
| -其中恢复重构(`-r`参数)时候,将数字的 "0","2",因为是全是数字,被当成list的恢复了(按照 0,2 排序的结果,没有刻意管理索引值)。 |
101 |
| - |
102 |
| - |
103 |
| -## 格式转换 |
104 |
| -使用 mkexcel.py 文件,接受一个层次的json文件 |
105 | 43 |
|
106 |
| -即可以使用上面`jsoncsv.py`展开的的json,dump为需要的格式(csv/xls) |
107 | 44 |
|
108 |
| -`cat raw.json|./jsoncsv.py -e |./mkexcel.py -t xls > test.xls` |
| 45 | +### -t -o |
109 | 46 |
|
110 |
| -其中 `./jsoncsv.py -e` 中 `-e`参数就是展开为一层数据,mkexcle 读取数据即可得到指定的格式 |
| 47 | +`-t`,`--type` dump type `['csv', 'xls']` |
111 | 48 |
|
112 |
| -### csv |
113 |
| -`csv` 是默认格式 |
114 | 49 | ```
|
115 |
| -cat expand.json|./mkexcel.py > test.csv |
116 |
| -cat expand.json|./mkexcel.py -t csv > test.csv |
117 |
| -./mkexcel.py expand.json text.csv |
118 |
| -./mkexcel.py expand.json > text.csv |
| 50 | +cat expand.json|mkexcel -t csv > output.csv |
| 51 | +cat expand.json|mkexcel -t xls > output.xls |
119 | 52 | ```
|
120 |
| - |
121 |
| -### xlsx |
122 | 53 |
|
123 |
| -使用`-t xls`或`--type xls`,声明dump 为 xls 格式 |
| 54 | +`-o`,`--output` 指定输出文件 |
124 | 55 |
|
125 |
| - ``` |
126 |
| -cat expand.json|./mkexcel.py -t xls > test.xls |
127 |
| -./mkexcel.py -t xls expand.json text.csv |
128 |
| -./mkexcel.py -t xls expand.json > text.csv |
129 |
| - ``` |
130 | 56 |
|
| 57 | +## NOTE |
131 | 58 |
|
132 |
| -## 实践 |
133 |
| - |
134 |
| - 具体实践样例参考某次[爬虫外包](https://github.com/alingse/crawler/tree/master/projects/sfda.gov)的数据处理过程 |
135 |
| - (**旧版本下的,应该需要相应调整**) |
136 |
| - |
137 |
| -## 测试 |
| 59 | +1. 原始json 的 各级key不能包含".",因为`.`是expand后key的连接字符。 |
| 60 | + |
| 61 | + key can't contains separator `.` |
| 62 | + |
| 63 | + 下个版本会考虑这个问题 |
| 64 | + |
| 65 | +2. 字典key中不能混杂数字。如果全部的key都是数字,恢复重构时会被当成list类型。 |
138 | 66 |
|
139 |
| -简单的 unittest |
140 |
| -``` |
141 |
| -python -m unittest test.test |
142 |
| -``` |
| 67 | + example: |
| 68 | + |
| 69 | + ``` |
| 70 | + echo '{"0":1,"2":[1,2]}'|jsoncsv -e| jsoncsv -r |
| 71 | + [1, [1, 2]] |
| 72 | + ``` |
143 | 73 |
|
144 | 74 | ## TODO
|
145 | 75 |
|
146 | 76 | 以下按顺序来做,
|
147 | 77 |
|
148 | 78 | 1. <s>增加unittest</s> 完成,
|
149 | 79 | 2. 更多的出错检查
|
150 |
| -3. <s>把文件读写从jsoncsv 中分离出来看</s> 暂时没必要 |
| 80 | +3. <s>把文件读写从jsoncsv 中分离出来看</s> |
151 | 81 | 4. <s>mkexcel 重构</s> 完成
|
152 |
| -5. 构建包 |
| 82 | +5. <s>构建包</s> 完成 |
| 83 | +6. 支持 separator 的转义 |
| 84 | +7. mkexcel 的效率 |
| 85 | +8. mkexcel csv xls dump 的 重构 |
| 86 | +9. dumptool.dump_xls 对 int 日期等支持 |
153 | 87 |
|
0 commit comments