1
- ## Usage
1
+ # Usage
2
2
3
3
``` python
4
4
In [1 ]: from half_json.core import JSONFixer
@@ -10,37 +10,66 @@ Out[3]: FixResult(success=True, line='[{}]', origin=False)
10
10
11
11
In [4 ]: f.fix(' {"a' )
12
12
Out[4 ]: FixResult(success = True , line = ' {"a":null}' , origin = False )
13
+
14
+ In [5 ]: f.fix(' {"a":}' )
15
+ Out[5 ]: FixResult(success = True , line = ' {"a":null}' , origin = False )
13
16
```
14
17
15
18
## 目标
16
19
17
- 修复残破的 json
20
+ fix invalid/broken/truncated json
18
21
19
- ## 修复原理
22
+ # 修复原理
20
23
21
- 1 . 根据异常提示来做一些操作, json 预期啥给啥
22
- 2 . 根据文本前后,删除一些 BadCase
24
+ 1 . JSONDecoderError
25
+ 2 . line context
23
26
24
27
## HitRatio
25
28
29
+ 根据 checks 里面的工具来衡量修改效果
30
+
31
+ ABC : autogen --> broken --> check
32
+ TSR : run test.sh show.sh ratio.sh
33
+
34
+ ### FixRatio
35
+
36
+ 仅判断 result.success == True
37
+
26
38
``` bash
27
- ./runtest.sh
28
- # 查看准确率
29
- seq 1 10| xargs -I {} ./runtest.sh| grep ratio: | awk ' {t += $3; h+= $6}{print h/t}' | tail -1
39
+ ./runratio.sh fix
30
40
```
31
- 1 . 0.4269, 0.4287, 0.4303 # 实现完 12 条规则
32
- 2 . 0.5037, 0.5084, 0.5077 # string 的 " 补充在末尾
33
- 3 . 0.5259, 0.5224, 0.5187 # Array 需要 pos - 2
34
- 4 . 0.5433, 0.5311, 0.5381 # Array 细化一下 [ , 的情况
35
- 5 . 0.7192, 0.7216, 0.7265 # 大改进, FIX 之前的 Bug( parser 被冲掉了)
36
- 6 . 0.7732, 0.7686, 0.7701 # case: {"a":1 --> 补充 }
37
- 7 . 0.60 , 0.58 # 去掉了空行
38
- 8 . 0.6971, 0.6969, 0.6984 # 增加处理 StopIteration
39
- 9 . 0.7428, 0.7383, 0.7427 # 增加处理 half parse
40
- 10 . 0.7617,0.7631, 0.7558 # 细化处理 half parse
41
- 11 . 0.7608,0.7612, 0.7650 # 添加从左处理
42
- 12 . 0.9817,0.9827, 0.9819 # 增加对字符串的处理
43
- 13 . 0.8314,0.8302, 0.8312 # 去掉对字符串的额外处理
41
+ ```
42
+ 1. 0.4269, 0.4287, 0.4303 # 实现完 12 条规则
43
+ 2. 0.5037, 0.5084, 0.5077 # string 的 " 补充在末尾
44
+ 3. 0.5259, 0.5224, 0.5187 # Array 需要 pos - 2
45
+ 4. 0.5433, 0.5311, 0.5381 # Array 细化一下 [, 的情况
46
+ 5. 0.7192, 0.7216, 0.7265 # 大改进, FIX 之前的 Bug( parser 被冲掉了)
47
+ 6. 0.7732, 0.7686, 0.7701 # case: {"a":1 --> 补充 }
48
+ 7. 0.60 , 0.58 # 去掉了空行
49
+ 8. 0.6971, 0.6969, 0.6984 # 增加处理 StopIteration
50
+ 9. 0.7428, 0.7383, 0.7427 # 增加处理 half parse
51
+ 10. 0.7617, 0.7631, 0.7558 # 细化处理 half parse
52
+ 11. 0.7608, 0.7612, 0.7650 # 添加从左处理
53
+ 12. 0.9817, 0.9827, 0.9819 # 增加对字符串的处理
54
+ 13. 0.8314, 0.8302, 0.8312 # 去掉对字符串的额外处理
55
+ 14. 0.95X # 已不可参考
56
+ ```
57
+
58
+ ### Real HitRatio
59
+
60
+ 判断 result.success == True
61
+
62
+ 并且解析后的 json 大体和原来一致(equal && dictdiffer)
63
+
64
+ ``` bash
65
+ ./runratio.sh hit
66
+ ```
67
+ ```
68
+ 1. 0.5610, 0.5563, 0.5529 # origin
69
+ 2. 0.5593, 0.5532, 0.5587 # fix :} --> :null}
70
+ ```
71
+
72
+ # TODO
44
73
45
74
## 目前的缺点 && 发现
46
75
@@ -50,8 +79,6 @@ seq 1 10|xargs -I {} ./runtest.sh|grep ratio: |awk '{t += $3; h+= $6}{print h/t}
50
79
应该明确 JSONFixer 的能力范围, 对 runratio.sh 也应该比较前后两个的 json 相似程度。
51
80
(听起来像无能者的辩白?)
52
81
53
- ## TODO
54
-
55
82
1 . 考虑分支回溯的方式来试探
56
83
2 . 解析缺失的 JSON 常量
57
84
0 commit comments