現在の現象
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'}
自分でも調べまくりましたが、解決方法は見つかりませんでした。
どなたかご教授お願い致します。
> Pythonでjsonファイルの「'address': 'Japan, 埼玉県川口市東本郷(大字)113-2', ・・・」の部分のみを抽出し、jsonファイルに書き出したいです。
「の部分のみを抽出し」の意味がわからないです。結局どういう入力に対してどういう出力が欲しいのか、肝心なところが「・・・」などと省略してあるせいで伝わりません。
失礼しました。「'Japan, 埼玉県川口市東本郷(大字)113-2'」の部分(keyがaddressの要素部分)が欲しいです
情報はここに書くのではなくて質問を編集しましょう。
これ、json形式データなんですか?
{...}{...}{...}
とデータが並んでいて、解析するのが大変そう。
せめて改行が入っていれば簡単なのですが。