Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python JSONDecodeError:额外数据:第1行第884列(char 883)_Python_Json_Python 3.x_Nltk - Fatal编程技术网

Python JSONDecodeError:额外数据:第1行第884列(char 883)

Python JSONDecodeError:额外数据:第1行第884列(char 883),python,json,python-3.x,nltk,Python,Json,Python 3.x,Nltk,我想按关键字对评论进行标记和排序,但打开json时会出现问题,程序会抛出一个错误:JSONDecodeError:Extra data:line 1 column 884(char 883)。 test2.json和keywords.txt文件如下: 这是我的密码: 导入nltk 从nltk.stem.snowball导入RussianStemmer 从nltk.corpus导入停止词 导入nltk、字符串、json st=RussianStemmer() def标记化(文件文本): #应

我想按关键字对评论进行标记和排序,但打开json时会出现问题,程序会抛出一个错误:JSONDecodeError:Extra data:line 1 column 884(char 883)。 test2.json和keywords.txt文件如下:

这是我的密码:


导入nltk
从nltk.stem.snowball导入RussianStemmer
从nltk.corpus导入停止词
导入nltk、字符串、json
st=RussianStemmer()
def标记化(文件文本):
#应用nltk标记化
tokens=nltk.word\u标记化(文件\u文本)
#删除标点符号
tokens=[i表示标记中的i,如果(i不在字符串中。标点符号中)]
#删除停止词
stop\u words=stopwords.words(‘俄语’)
停止单词。扩展(['
代币=[i表示代币中的i,如果(i不在stop_单词中)]
#清洁用语
令牌=[i.replace('«','')。为令牌中的i替换('»','')
归还代币
以open('C:\\Creme\\token\\keywords.txt')作为fin:
ww=fin.read().split(',')
关键字=列表(集合([st.stem(w)表示ww中的w]))
以open('C:\\Creme\\token\\test2.json')作为fin:
text=json.load(fin)
将open('C:\\Creme\\token\\bad.json','a',encoding='utf8')作为fout:
对于文本中的dd:
#对于dd中的d:
words=tokenize_me(dd['description'])
拆分文本=列表(设置([st.stem(word)表示word中的word]))
#中断
tt=列表(过滤器(lambda w:w在关键字中,拆分为文本))
如果tt:
json.dump(dd,fout)
fout.write(“\n”)

请帮助我查找错误并修复代码。

您可能无法执行此操作,因为这会导致格式错误的JSON文件:

for dd in text:
    if tt:
        json.dump(dd, fout)    # <<-- cannot do this in the loop
        fout.write('\n')

我的决定有点不同——读入文件并将字符串格式化为正确的json格式:

with open('C:\\Creme\\token\\test2.json', 'r', encoding='utf8') as fin:
    data = fin.read()
    formated_text = data.replace('}{', '},{')
    text = json.loads(f'[{formated_text}]')    


with open('C:\\Creme\\token\\bad.json', 'a', encoding='utf8') as fout:
    for dd in text:
        #for d in dd:
        words = tokenize_me(dd['description'])
        split_text = list(set([st.stem(word) for word in words]))
        #break
        tt = list(filter(lambda w: w in key_words, split_text))
        if tt:
            json.dump(dd, fout)
            fout.write('\n')

显然,
test2.json
有额外的数据。你能分享那个文件的内容吗?与此同时,我的猜测是:该文件是由多个连续的
json.dump
调用创建的,但是
json.load
无法读取,因为组合两个合法的json字符串不会产生合法的json字符串<例如,代码>[1,2,3][4,5,6]不是合法的json。我添加了一个指向文件test2.json和keywords.txt的链接。如果您知道如何更改代码,请帮助我更改代码?我如何更改代码以避免出现错误?@Yaroslav我已在回答中添加了或多或少正确的代码版本。这没有帮助。这行代码有问题。由于该行而导致的错误。我不知道如何修理它。使用open('C:\\Creme\\token\\test2.json')作为fin:text=json.load(fin)@Yaroslav,您得到的确切错误消息是什么?谢谢你,莱尼克,你的回答和正确的问题帮助我发现了一个错误。最后,我的决定有点不同。
with open('C:\\Creme\\token\\test2.json', 'r', encoding='utf8') as fin:
    data = fin.read()
    formated_text = data.replace('}{', '},{')
    text = json.loads(f'[{formated_text}]')    


with open('C:\\Creme\\token\\bad.json', 'a', encoding='utf8') as fout:
    for dd in text:
        #for d in dd:
        words = tokenize_me(dd['description'])
        split_text = list(set([st.stem(word) for word in words]))
        #break
        tt = list(filter(lambda w: w in key_words, split_text))
        if tt:
            json.dump(dd, fout)
            fout.write('\n')