質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

10413閲覧

Python & JSON: ValueError: Unterminated string starting at:のエラーで困っています。

yoyoyo0205

総合スコア20

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2017/09/19 10:48

編集2017/09/19 12:39

jsonファイルからtags部分のみを抽出して新しいファイルに書き出すという作業をしています。
環境はMacでpython2.7(anaconda経由)を使用しております。

ソースコードは以下の通りです。

python

1import codecs 2import json 3import glob 4 5 6allfile = glob.glob("*.jsonl") 7 8for file in allfile: 9 data = [] 10 with codecs.open(file,"r","utf-8") as f: 11 for i in f: 12 data.append(json.loads(i)) 13 14 text = [] 15 for i in data: 16 text.extend(i["tags"]) 17 18 with codecs.open("new_tags.txt","a","utf-8") as nt: 19 for txt in text: 20 nt.writelines(txt+"\n")

始めはうまく抽出処理ができていたのですが、途中のファイルから

ValueError: Unterminated string starting at: line 1 column 131 (char 130)

というエラーが出ており、処理を進められません。

扱っているjsonファイルの中身は以下のようなものです。(先頭1行)

jsonl

1{"video_id":"nm16580085","watch_num":81,"comment_num":2,"mylist_num":0,"title":"ほとんど紅魔郷風","description":"初投です。まだまだ未熟ですが・・・・よろしくおねがいします","category":"東方","tags":["東方"],"upload_time":1325364768,"file_type":"swf","length":281,"size_high":3125649,"size_low":3125596}

調べても原因がよくわからない初心者です。

###Traceback (発生しているメッセージ)

runfile('/Users/yo/Downloads/json_l.py', wdir='/Users/yo/Downloads') Traceback (most recent call last): File "<ipython-input-7-41ae6a345b74>", line 1, in <module> runfile('/Users/yo/Downloads/json_l.py', wdir='/Users/yo/Downloads') File "/Users/yo/anaconda/lib/python2.7/site-packages/spyder/utils/site/sitecustomize.py", line 880, in runfile execfile(filename, namespace) File "/Users/yo/anaconda/lib/python2.7/site-packages/spyder/utils/site/sitecustomize.py", line 94, in execfile builtins.execfile(filename, *where) File "/Users/yo/Downloads/json_l.py", line 19, in <module> data.append(json.loads(i)) File "/Users/yo/anaconda/lib/python2.7/json/__init__.py", line 339, in loads return _default_decoder.decode(s) File "/Users/yo/anaconda/lib/python2.7/json/decoder.py", line 364, in decode obj, end = self.raw_decode(s, idx=_w(s, 0).end()) File "/Users/yo/anaconda/lib/python2.7/json/decoder.py", line 380, in raw_decode obj, end = self.scan_once(s, idx) ValueError: Unterminated string starting at: line 1 column 131 (char 130)

どなたか同じ経験がある方がおりましたら、どういう状況なのか、改善案のヒントとなることがあれば教えていただけませんでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

can110

2017/09/19 11:30

提示エラーが発生する.jsonlファイルの先頭1行を追記すると回答得られやすいです。
can110

2017/09/19 11:51

提示されたjson文字列は問題ないようです(エラー再現しませんでした)。今一度、エラー発生するファイルが正しいか確認、またエラー詳細(Tracebackすべて)を追記すると回答えられるかもしれません。
can110

2017/09/19 14:23

追記ありがとうございます。エラー発生した.jsonlファイルのエンコーディングは正しく「utf-8」でしょうか?または、それを確認した手段を提示いただけますでしょうか?
guest

回答1

0

ベストアンサー

ある*.jsonlファイルのJSONが壊れているはずです。
data.append(json.loads(i))でエラーが発生しているのではないですか?
(質問の段階でエラーの発生行は記載すべきです。)
問題のファイルを除外するか、JSONファイルそのものを修正するしかないでしょう。

python

1for file in allfile: 2 print(file)

のようにファイル名を表示し、エラーでストップした直前に表示されたファイルが原因のはずです。

投稿2017/09/19 11:36

編集2017/09/19 13:52
NCC1701

総合スコア1680

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yoyoyo0205

2017/09/19 13:02

Tracebackでは、 obj, end = self.scan_once(s, idx) の部分がハイライトされています・・・。
yoyoyo0205

2017/09/19 13:47

初心者なのですが、恐らくいずれかのJSONが壊れているかもしれません。 効率の良いやり方がわからないのですが探してみます。
NCC1701

2017/09/19 13:51

for file in allfile: print(file) のようにファイル名を表示し、エラーでストップした直前に表示されたファイルが原因のはずです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問