2017-02-23 13 views
0

У меня есть JSon файл со строками формата:исправляющие формат JSON и реализации в Спарк

{"user1" : "a", 
"mobile": "b", 
"address": "c" 

{"user2" : "aa", 
"mobile": "bb", 
"address": "cc" 

Этот журнал неверно, так как нет } в конце каждой строки

Я попытался

text_file = open('abc.txt', "r", encoding='utf-8') 
read = text_file.read() 
a = read.split("\n") 
for i in a: 
    print(i+"}") 

Это дает мне один дополнительный } ближе к концу всех линий. Как его избежать?

Кроме того, мне нужно реализовать ту же логику в искре. Пожалуйста, дайте мне знать, какие изменения необходимы, или если есть гораздо лучше, логика в искре

+0

Вы должны использовать встроенный модуль 'json' для проверки вашей строки, а затем исправить ее в зависимости от того, какая ошибка показана. Нет никакой волшебной утилиты, о которой я знаю, которая исправит вашу строку. –

+0

Пример того, что поможет его текущий сценарий? это печать}} в конце каждой строки? – putonspectacles

+0

Печать {"user1": "a", "mobile": "b", "address": "c"} {"user2": "aa", "mobile": "bb", "address" : "cc"} } – SpaceOddity

ответ

1

с Python

text_file = open('abc.txt', 'r') 
read = text_file.read() 
a = read.split('{') # split with '{' 
del a[0] # remove the first line contains space 
for i in a: 
    print("{"+i.strip()+"}") # if you want to remove '\n' add .replace('\n','') 

результат:

{"user1" : "a", 
"mobile": "b", 
"address": "c"} 
{"user2" : "aa", 
"mobile": "bb", 
"address": "cc"} 

с искрой

# use wholeTextFiles to read all lines, textFile split lines with '\n'  
text_file = sc.wholeTextFiles("abc.txt") 
a = text_file.map(lambda (pathFile , lines) : lines). # select only lines 
       flatMap(lambda text : text.split('{')). # split with '{' 
       filter(lambda line : len(line) > 0). # remove the first line 
       map(lambda line : '{'+line.strip()+'}') 
for i in a.collect() : 
    print i 

результат:

{"user1" : "a", 
"mobile": "b", 
"address": "c"} 
{"user2" : "aa", 
"mobile": "bb", 
"address": "cc"} 
Смежные вопросы