🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Python 3.x

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

Q&A

1回答

2661閲覧

Pythonでjsonファイルの特定要素のみ書きだしたいです。

Taka787

総合スコア23

Python 3.x

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

0グッド

0クリップ

投稿2019/11/28 06:40

編集2019/11/28 07:17

現在の現象

Pythonでjsonファイルの「'Japan, 埼玉県川口市東本郷(大字)113-2'」(keyがaddressの要素部分)の部分のみを抽出し、jsonファイルに書き出したいです。以下のコード(現時点では、書きだす部分のコードはないです。とりあえず標準出力されるか確認後、追加する予定)で実行しますが、元のjsonファイルのkeyがシングルクォーテーションで囲まれているためか、> json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 2 (char 1) と表示されます。

python

1# coding: utf-8 2from bs4 import BeautifulSoup ##スクレイピング用 3import json ##Python3 で JSON 形式のデータを扱う方法 4import os 5 6with open('./output.json') as f: 7 jsn = json.load(f) 8 9 10print(jsn["address"]) 11 12 13""" 14 15dict = open("output.json") 16json_file = open('test.json', 'w') 17json.dump(dict, json_file, indent=2) 18 19""" 20

試したこと

以下のコードで正しいjson形式に変換されると書いてあったのでやってみましたが、結果は、変わりませんでした。

python

1dict = open("output.json") 2json_file = open('test.json', 'w') 3json.dump(dict, json_file, indent=2)

以下、jsonファイルの一部です。

json

1{'address': 'Japan, 埼玉県川口市東本郷(大字)113-2', 'city': '川口市', 'country': 'Japan', 'housenumber': '113-2', 'lat': 35.81758611109522, 'lng': 139.76740555557942, 'ok': True, 'quality': 1, 'raw': {'id': 'address.111713514', 'type': 'Feature', 'place_type': ['address'], 'relevance': 1, 'properties': {'accuracy': 'point'}, 'text': '東本郷(大字)', 'place_name': 'Japan, 埼玉県川口市東本郷(大字)113-2', 'center': [139.76740555557942, 35.81758611109522], 'geometry': {'type': 'Point', 'coordinates': [139.76740555557942, 35.81758611109522]}, 'address': '113-2', 'context': [{'id': 'place.4155459742741920', 'wikidata': 'Q387136', 'text': '川口市'}, {'id': 'region.1175436797232720', 'short_code': 'JP-11', 'wikidata': 'Q128186', 'text': '埼玉県'}, {'id': 'country.12208545982530190', 'short_code': 'jp', 'wikidata': 'Q17', 'text': 'Japan'}], 'place': '川口市', 'region': '埼玉県', 'country': 'Japan'}, 'state': '埼玉県', 'status': 'OK'}{'address': 'Japan, 埼玉県川口市足立区東本郷(大字)112-7', 'city': '川口市', 'country': 'Japan', 'housenumber': '112-7', 'lat': 35.81758611109522, 'lng': 139.76718888888757, 'ok': True, 'quality': 1, 'raw': {'id': 'address.111713514', 'type': 'Feature', 'place_type': ['address'], 'relevance': 1, 'properties': {'accuracy': 'point'}, 'text': '東本郷(大字)', 'place_name': 'Japan, 埼玉県川口市足立区東本郷(大字)112-7', 'center': [139.76718888888757, 35.81758611109522], 'geometry': {'type': 'Point', 'coordinates': [139.76718888888757, 35.81758611109522]}, 'address': '112-7', 'context': [{'id': 'locality.9449756275413510', 'wikidata': 'Q213464', 'text': '足立区'}, {'id': 'place.4155459742741920', 'wikidata': 'Q387136', 'text': '川口市'}, {'id': 'region.1175436797232720', 'short_code': 'JP-11', 'wikidata': 'Q128186', 'text': '埼玉県'}, {'id': 'country.12208545982530190', 'short_code': 'jp', 'wikidata': 'Q17', 'text': 'Japan'}], 'locality': '足立区', 'place': '川口市', 'region': '埼玉県', 'country': 'Japan'}, 'state': '埼玉県', 'status': 'OK'}{'address': 'Japan, 埼玉県川口市足立区東本郷(大字)112-3', 'city': '川口市', 'country': 'Japan', 'housenumber': '112-3', 'lat': 35.81773055553437, 'lng': 139.767097222209, 'ok': True, 'quality': 1, 'raw': {'id': 'address.111713514', 'type': 'Feature', 'place_type': ['address'], 'relevance': 1, 'properties': {'accuracy': 'point'}, 'text': '東本郷(大字)', 'place_name': 'Japan, 埼玉県川口市足立区東本郷(大字)112-3', 'center': [139.767097222209, 35.81773055553437], 'geometry': {'type': 'Point', 'coordinates': [139.767097222209, 35.81773055553437]}, 'address': '112-3', 'context': [{'id': 'locality.9449756275413510', 'wikidata': 'Q213464', 'text': '足立区'}, {'id': 'place.4155459742741920', 'wikidata': 'Q387136', 'text': '川口市'}, {'id': 'region.1175436797232720', 'short_code': 'JP-11', 'wikidata': 'Q128186', 'text': '埼玉県'}, {'id': 'country.12208545982530190', 'short_code': 'jp', 'wikidata': 'Q17', 'text': 'Japan'}], 'locality': '足立区', 'place': '川口市', 'region': '埼玉県', 'country': 'Japan'}, 'state': '埼玉県', 'status': 'OK'}

自分でも調べまくりましたが、解決方法は見つかりませんでした。
どなたかご教授お願い致します。

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

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

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

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

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

quickquip

2019/11/28 06:49

> Pythonでjsonファイルの「'address': 'Japan, 埼玉県川口市東本郷(大字)113-2', ・・・」の部分のみを抽出し、jsonファイルに書き出したいです。 「の部分のみを抽出し」の意味がわからないです。結局どういう入力に対してどういう出力が欲しいのか、肝心なところが「・・・」などと省略してあるせいで伝わりません。
Taka787

2019/11/28 06:52

失礼しました。「'Japan, 埼玉県川口市東本郷(大字)113-2'」の部分(keyがaddressの要素部分)が欲しいです
quickquip

2019/11/28 07:08

情報はここに書くのではなくて質問を編集しましょう。
shiracamus

2019/11/28 22:46 編集

これ、json形式データなんですか? {...}{...}{...} とデータが並んでいて、解析するのが大変そう。 せめて改行が入っていれば簡単なのですが。
guest

回答1

0

以下、jsonファイルの一部です。

{'address': 'Japan, 埼玉県川口市東本郷(大字)113-2', 'city': '川口市', (略)

まず。そもそも。
JSONにおける文字列は"で括るというのが仕様であって、'で括ってあるこれは断じてJSONではありません

JSONではないのですからJSONパーザであるjson.loadはエラーになります。当然です。


また複数のオブジェクト(JSONの用語です)が区切り文字などなくつながっています。これもJSONの仕様に反しています。


全体がPythonのリテラルとして解釈可能な文字列なのであれば
https://docs.python.org/ja/3/library/ast.html#ast.literal_eval
が使えたかもしれませんが、このデータでは頑張って必要なパーザを自分で書くしかないのかなぁ、と思います。

投稿2019/11/28 23:15

quickquip

総合スコア11231

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問