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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

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

Python

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

Q&A

3回答

4827閲覧

jsonファイルの読み込み

cho

総合スコア23

Python 3.x

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

Python

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

0グッド

0クリップ

投稿2015/11/05 09:29

編集2015/11/05 10:42

python3系でjsonファイルを読み込みたいと考えています.
以下のように読み込むとdict型になると各サイト等に書いてあるのですが,
list型になってしまいます.

python

1>>>f=open('file','r') 2>>>data=json.load(f) 3>>>f.close() 4 5>>>print(type(data).__name__) 6list 7

dict型として読み込みたいのですがどうしたらよいでしょうか.

ファイルの内容は以下のようになります.
(以下のような形がいくつも連なっています)

{ "項目1": "hoge", "項目2": "hogehoge", "項目3": [ "hoge", "hoge" ] }

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

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

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

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

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

guest

回答3

0

どうしても、ディクトにしたいのなら、
{num: dic for num, dic in enumerate(data)}
として、番号をkeyにしてみては?

投稿2015/11/11 05:50

kdaira_

総合スコア32

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

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

0

入力されるJSONファイルはハッシュ形式になっているのですか?

入力ファイルのフォーマットが分からないと具体的に回答できません・・・


<追記:2015/11/05 21:15>

ご提示頂いたサンプルを読み込んでみましたが、dict型になりましたよ!?

Bash

1$ cat test.json 2{ 3 "項目1": "hoge", 4 "項目2": "hogehoge", 5 "項目3": [ 6 "hoge", 7 "hoge" 8 ] 9} 10$

Python

1>>> import json   ← ★ 2>>> f=open('test.json','r') 3>>> data=json.load(f) 4>>> f.close() 5>>> print(type(data).__name__) 6dict 7>>>

json モジュールは事前に import されているのですよね?

投稿2015/11/05 10:06

編集2015/11/05 12:15
pi-chan

総合スコア5936

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

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

cho

2015/11/05 10:43

ご指摘ありがとうございます。 ファイル内容を追記しましたので,助言をいただければ幸いです.
cho

2015/11/06 06:17

確認ありがとうございます. 私のほうでもご提示させていただいた部分のみなら,dictになるのですが, [ { "項目1": "hoge", "項目2": "hogehoge", "項目3": [ "hoge", "hoge" ] }, { "項目1": "hoge", "項目2": "hogehoge", "項目3": [ "hoge", "hoge" ] } ] このように複数個連なるとlistになってしまいます.
cho

2015/11/06 06:18

コメントではうまくインデントが付きませんが,先にご提示させていただいた形と同じです.
pi-chan

2015/11/06 06:46

全体が '[' と ']' で括られているので、ハッシュではなく、ハッシュを要素に持つ配列になっている為、list型になってしまうのだと思います。 hiro-k さんのご指摘の通りですね。 なので、どうしてもdict型で読み込みたいならば、読み込む前にファイルを変換するか、文字列として読み込んでからハッシュに変換した後に 「json.load」 するしかありません。
guest

0

ファイルの代わりに文字列を読み込む loads を使用してみると・・・

a=json.load('["foo", {"bar":["baz", null, 1.0, 2]}]')
だと a は [u'foo', {u'bar': [u'baz', None, 1.0, 2]}] ということでリストになります。

一方、
a=json.loads('{"bar":["baz", null, 1.0, 2]}')
だと a は {u'bar': [u'baz', None, 1.0, 2]} ということで dict になります。

読み込む元のファイルの内容がリストに変換されるような json なのではないでしょうか?

上記例は、 http://docs.python.jp/2.6/library/json.html より拝借しました。

投稿2015/11/05 09:58

hiro-k

総合スコア902

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問