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

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

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

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Q&A

3回答

5942閲覧

TypeError: string indices must be integersについて

EUROPEAN

総合スコア17

JSON

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

0グッド

0クリップ

投稿2018/12/19 01:16

編集2018/12/19 07:03

現在jsonファイルを読み込み形態素解析を行うプログラムを作成しています。
しかし、TypeError: string indices must be integersとなってしまい実行できません。
json形式が{で始まっているため型が違うということは理解したのですがどのように書きかえればうまく実行できるでしょうか?

以下はプログラムの一部ですが
for review in reviews:
text = review['text']
のところでエラーがでます。

import json with open(filename, encoding=encoding) as f: reviews = json.load(f) g = nx.Graph() for review in reviews: text = review['text'] # text を形態素解析して単語をリスト tokens に入れる tokens = fd.get_token_list(text, ['名詞', '動詞', '形容詞']) fd.add_edges_from_word_list(tokens, g) fd.add_probability_label_node(g, len(tweets)) fd.add_probability_label_edge(g, len(tweets)) fd.add_npmi_label(g) return g
{ "title": "劇場版コード・ブルー -ドクターヘリ緊急救命-(2018)", "rating_value": 2.93, "data": { "0": "感想を申し上げます。初回からのドラマ大ファンとして当地での公開を喜びましたが、映画として見ると不完全燃焼の感有り。やはり邦画全般に言える事ですが、細かで且つ静寂なカットが多過ぎます。流れが悪い。製作スタッフでもないのに、周りの外国人から何か批判されているようでイライラしてしまいます。佐藤直紀氏の曲が際立つ感動シーンでは相変わらず涙しましたが、臓器提供を決断するご両親の件が最も劇場の涙を誘っていました。まさかの◯◯先生の中国語(劇場大ウケ)からのギャップも有ったか。しかし、エンディングのHANABIはしっかり聞きたかった。全く余韻に浸れず残念。\n次作が有れば、映画ならではのダイナミックさと割切りを望みます。", "1": "ドラマのファーストシーズンあたりが一番良かった。映画は、オマケ的ですね。\nエピソードがつめ込み過ぎ。映画だからって、ロケを大きくやってみただけって感じ。\nドラマファンだったので、残念。", "2": "色々盛りだくさんで、結構見応えありました。\n\n最後の最後まで飽きずに観れて面白かったです。\n\n私的には、友人にオススメ出来る映画だと思いました。", "3": "やっぱりコードブルーは面白いなって改めて感じました。医療ドラマの中で1番好きなドラマです!!\nそして最後には田所先生を出すなんてズルすぎます笑", "4": "もう、全体的にまとまりがなく雑で安易で稚拙な出来だった。ここでも相応の評価になってるしね。\n\nこれは脚本と監督のせい。\n\nそれでも大ヒットしたのは、あの5人のメンバーに会いたいからでしょうな。多分つまらない……でもガッキーや山Pに会いたい。という思いから、つい映画館に足を運んでしまうんでしょう。\n\nそしてガッキーは泣く演技がもう下手。\nでも、それがかわいかった。", "5": "エピソードを詰め込みすぎて、1つ1つの扱いが雑すぎる。", } }

また、実験のために一分だけを読み込んで動かしてみたいのですがその場合はどのように書いたらよろしいでしょうか。jsonについて学習したばかりで知識が足りず申し訳ございません。

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

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

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

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

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

can110

2018/12/19 01:24

jsonファイルには'text'というキーは存在しません。 具体的に取得したい部分はどこでしょうか?
EUROPEAN

2018/12/19 05:16

"data"部分になります
guest

回答3

0

( があるからエラーになってるってのがわかってるなら、その文字を削除すればいい話では。

投稿2018/12/19 01:26

y_waiwai

総合スコア88167

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

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

0

質疑の回答をまつべきなのかもしれませんが。

提示の形のjsonだと、for..inで取りだしたとき、reviewに取り出されてくるのは辞書のキー(つまり、"title","rating_value","data")です。これらは文字列なので、review['text']という参照について、文字列を[]で参照するときは数値にしなさい(review[0]とか)、というエラーです。

仮にtextがあることがあらかじめ分かっているならforをする必要はなく最初からreviews['text']とすればよいと思います。

また、reviewsやreviewという取り出しかたからするとそもそもjsonが

javascript

1[ 2 { "title":"something", "rating_value":"val",}, 3 { "title":"else", "rating_value":"nan",}, 4]

こういった体裁であるべきではないのかなと想像しました(そのファイルを作るときに想定外の処理をしてしまっているのでは?)。

投稿2018/12/19 01:46

papinianus

総合スコア12705

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

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

EUROPEAN

2018/12/19 06:03

すみません掲載したコードを書き換え忘れていました、取り出したい部分はtextではなく"data"です。 この場合取得する際のjsonを解答いただいたような形で抜き出さなければならないのでしょうか? 膨大なデータ量であるためこのままの形のjsonファイルを解析したいのですが不可能なのでしょうか、、、
guest

0

以下にてdataの各レビュー部分を列挙できます。
辞書として格納されているので、各レビューの順番は番号順とは限らない点のみ注意ください。

Python

1# 略 2for key,text in reviews['data'].items(): 3 #print(key) # 番号。"0"など 4 print(text) # レビュー。"感想を申し上げます。~"など 5 6 # text を形態素解析して単語をリスト tokens に入れる 7 tokens = fd.get_token_list(text, ['名詞', '動詞', '形容詞'])

投稿2018/12/19 06:05

can110

総合スコア38352

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問