Skip to content

Commit d64bc47

Browse files
authored
Merge pull request #8 from half-pie/try-fix-stop
fix: fix bug && add feature
2 parents 2845ab0 + f058eec commit d64bc47

File tree

6 files changed

+51
-9
lines changed

6 files changed

+51
-9
lines changed

.travis.yml

+2
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ script:
1313
- flake8 half_json tests --max-line-length=200
1414
- nosetests --cover-package=half_json --with-coverage
1515
- python setup.py install
16+
- jsonfixer checks/oneline.json checks/oneline.fix.json
17+
- cd checks && ./runtest.sh
1618

1719
after_success:
1820
- coveralls

checks/oneline.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
0.
1+
1]

half_json/core.py

+18-2
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ def fix(self, line):
2222
pass
2323

2424
ok, new_line = self.fixwithtry(line)
25-
return FixResult(success=True, line=new_line, origin=False)
25+
return FixResult(success=ok, line=new_line, origin=False)
2626

2727
def fixwithtry(self, line):
2828
if self._max_try <= 0:
@@ -140,7 +140,23 @@ def patch_stop_iteration(self, line):
140140
# 1. }]
141141
# 2. ]}
142142
# 3. constans
143-
return False, line
143+
# 先 patch 完 {[]}
144+
return False, patch_left_object_and_array(line)
145+
# return False, line
146+
147+
148+
def patch_left_object_and_array(line):
149+
# '}]{[' --> '[{}]{['
150+
pairs = {'}': '{', ']': '['}
151+
breaks = '{['
152+
left = ""
153+
for char in line:
154+
if char in breaks:
155+
break
156+
if char in pairs:
157+
left = pairs[char] + left
158+
159+
return left + line
144160

145161

146162
def insert_line(line, value, pos, end=None):

half_json/main.py

+6-5
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,13 @@ def fixjson():
2121
if not line:
2222
continue
2323
total += 1
24-
ok, new_line = fixer.fix(line)
25-
if ok:
26-
outf.write(new_line + "\n")
27-
hit += 1
24+
result = fixer.fix(line)
25+
if result.success:
26+
outf.write(result.line + "\n")
27+
if not result.origin:
28+
hit += 1
2829
else:
29-
print(ok, line, new_line)
30+
print(result)
3031
except Exception as e:
3132
print(e, line)
3233
print("total is {} and hit {} --> ratio:{} \n".format(total, hit, hit * 1.0 / total))

setup.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313

1414
setup(
1515
name='jsonfixer',
16-
version='0.1.2',
16+
version='0.1.3',
1717
url='https://github.com/half-pie/half-json',
1818
description='jsonfixer: fix invalid json: broken-json / truncated-json.',
1919
long_description=readme,

tests/test_stop.py

+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
# coding=utf8
2+
3+
import unittest
4+
5+
from half_json.core import JSONFixer
6+
7+
8+
class TestSimpleCase(unittest.TestCase):
9+
10+
def test_patch_left_object(self):
11+
line = '}'
12+
ok, newline, _ = JSONFixer().fix(line)
13+
self.assertTrue(ok)
14+
self.assertEqual('{}', newline)
15+
16+
def test_patch_left_array(self):
17+
line = ']'
18+
ok, newline, _ = JSONFixer().fix(line)
19+
self.assertTrue(ok)
20+
self.assertEqual('[]', newline)
21+
22+
# TODO
23+
# '[]]'

0 commit comments

Comments
 (0)