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

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

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

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

Python

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

Q&A

解決済

1回答

936閲覧

pythonでのjsonファイル読み込みについて

crystalglass

総合スコア6

JSON

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

Python

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

0グッド

0クリップ

投稿2020/06/20 06:29

編集2020/06/20 06:31

以下のtext.jsonファイルをpythonで読み込みたいのですが、
ファイルの先頭2行以外の値を取得することができません。
具体的にはdistanceのtext部分(120Km)だけを取得したいと思っていますが
私が作成したソースコードですと最下行で
「TypeError: list indices must be integers or slices, not str」というエラーが出てしまいます。
どうすればこのエラーが解消するでしょうか。
また、できれば同じ構成のファイルを複数読み込み、distanceのtext部分を取得したいと思っていますので
その方法も御教示いただけますと助かります。

json

1{ 2 "destination_addresses" : [ "日本、〒310-0805 茨城県水戸市" ], 3 "origin_addresses" : ["日本、〒134-0086 東京都江戸川区"], 4 "rows" : [ 5 { 6 "elements" : [ 7 { 8 "distance" : { 9 "text" : "120 km", 10 "value" : 119687 11 }, 12 "duration" : { 13 "text" : "1時間38分", 14 "value" : 5850 15 }, 16 "status" : "OK" 17 } 18 ] 19 } 20 ], 21 "status" : "OK" 22}

python

1import json 2json_open = open('test.json', 'r',encoding="utf-8") 3json_load = json.load(json_open) 4 5print(json_load['destination_addresses']) 6print(json_load['origin_addresses']) 7print(json_load['rows']) 8print(json_load['rows']['elements']['distance']['text']) 9

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

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

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

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

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

LouiS0616

2020/06/20 06:32

json_load['rows']の型を確認してみましたか?
crystalglass

2020/06/20 06:51

ありがとうございます。型がlistであることは分かりました。 要素を指定して値を取得すればよいのかと思い、調査中ですが、 ネットで調べて出てくるのは簡単なCSV形式なので、今回のような場合、 どのように取得すればよいのか、まだ今のところ解決していません。
LouiS0616

2020/06/20 06:56

リストの最初の(0番目の)要素を取り出す方法はご存じありませんか。
crystalglass

2020/06/20 07:03

python昨日から触り始めたもので・・・すみません。 0番目の要素を取り出すですね、調べてやってみます。
LouiS0616

2020/06/20 07:10

辞書の使い方、リストの使い方を知らないとJSONを扱うのはちょっと大変なので、多少遠回りなようでもWebサイトや書籍で練習しておくと良いです。急がば回れ的なやつです。
crystalglass

2020/06/20 07:31

ありがとうございます!理解できました。 print(json_load['rows'][0]['elements'][0]['distance']['text']) で期待していた値を取ることが出来ました!
LouiS0616

2020/06/20 07:33

解決したようで何よりです。 回答欄にどのように問題を解決したか書いて、自己解決で閉めておいて下さい。解決方法(What)だけではなく、どのように解決方法を見出したか(How)を書いておくと今後の助けにもなるでしょう。
crystalglass

2020/06/20 07:52

何とも原始的なやり方でしたが、記載しておきました。 ありがとうございます!
guest

回答1

0

自己解決

全く論理的な導き方ではないですが、
print(json_load['rows'])
print(json_load['rows'][0])
の2つで「[」あり、なしの違いが出たため、
同じようにすればelementsの値も取れるであろうと思い、
print(json_load['rows'][0]['elements'][0])
としました。
後はjsonファイル内に「[」が無かったため、Keyを指定すれば出てくると思い、
print(json_load['rows'][0]['elements'][0]['distance']['text'])
としてみたところ、期待通りの結果が取得できました。

投稿2020/06/20 07:50

crystalglass

総合スコア6

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

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

LouiS0616

2020/06/20 08:16

Pythonにはtype関数というものがあり、これを使うとより汎用的であることもお伝えしておきます。 obj = json_load['rows'] print(type(obj)) ← <class 'list'>と出力される obj = json_load['rows'][0] print(type(obj)) ← <class 'dict'>と出力される オブジェクトの型を知りたい場面はこれからも多いと思います。是非活用してみて下さい。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問