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

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

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

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

Python 3.x

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

Q&A

解決済

1回答

609閲覧

python JSON の前後に特殊なタグを加えたい

Satomi07

総合スコア24

JSON

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

Python 3.x

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

0グッド

0クリップ

投稿2020/11/03 08:42

編集2020/11/03 14:02

pythonで生成して、dumpするJSONの前後に、特殊なタグを加えたいです。
(data='{ と }'です)

しかし普通に書くと、どうしてもstringになってしまい、jsonで書きだすことができません。
どのような手段がありますでしょうか。お知恵をいただけますと幸いです。

data='{ ←つけたいタグ

以下pythonで生成したJSON

{ "type": "FeatureCollection",
"crs": { "type": "name",
"properties": {
"name": "urn:ogc:def:crs:OGC:1.3:CRS84"
}
},
"features": [
{ "type": "Feature",
"properties": { },
"geometry": {
"type": "MultiPoint",
"coordinates": [[138.7309, 35.3628], [138.8079, 35.1983],[139.0248, 35.2248]]
}
},
{ "type": "Feature",
"properties": { },
"geometry": {
"type": "LineString",
"coordinates": [[138.7309, 35.3628], [138.8079, 35.1983],[139.0248, 35.2248]]
}},
{ "type": "Feature",
"properties": { },
"geometry": {
"type": "Polygon",
"coordinates": [[[138.7309, 35.3628],[138.8079, 35.1983],[139.0248, 35.2248],[138.7309, 35.3628]]]
}}
]
}

以上pythonで生成したjson

}'←つけたいタグ

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

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

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

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

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

tiitoi

2020/11/03 09:03 編集

json の形式がおかしいです。 正しい形で転記してください。
Satomi07

2020/11/03 10:18 編集

JSONはかなり大きいので省略しています。質問は、forループに入れ込むところです。
meg_

2020/11/03 11:02

質問の「data」ですと文字列になってしまうと思いますが、本当にこの形式ですか?
Satomi07

2020/11/03 11:46

geojsonで最初にdata='{で始まり、}'で終わるのですが…これを扱いきれずに困っております…
Satomi07

2020/11/03 11:48

すみません、質問を整理して書き直します。
tiitoi

2020/11/03 13:36

> JSONはかなり大きいので省略しています コードは json の階層構造によって変わってくるので、まず実行エラーにならない正しい json 形式を転記いただかないと回答は難しいです。 データ全部ではなく、リストとかであれば、最初の数個だけに削るなどしてもよいので、json の構文チェックでエラーにならないものを用意してください https://lab.syncer.jp/Tool/JSON-Viewer/
Satomi07

2020/11/03 14:02

ありがとうございます、書き直しました。
tiitoi

2020/11/03 14:38 編集

Python で生成した dict オブジェクトを json 形式で書き出したいということでしょうか。だとしたら、json.dump() を使えばできないでしょうか? 「data='{ と }' を追加する」の意味がよくわからないです。geojson の構文について調べましたが、そのような記載もとくにないです。 https://gis-oer.github.io/gitbook/book/materials/web_gis/GeoJSON/GeoJSON.html
Satomi07

2020/11/03 16:14 編集

教えていただきたいことは 「Pythonでjsonファイルを書き出したいが、必要なタグをつけるとjson.dumpができないが、どうすれば良いでしょうか」です。 (Mapboxで使う特殊構文のGeojesonですが、jsonの中身についてはデバッグできるので大丈夫です)
Satomi07

2020/11/03 16:18

ありがとうございます、確かにおっしゃる通りですね。
guest

回答1

0

ベストアンサー

「必要なタグをつけるとjson.dumpができないが、どうすれば良いでしょうか」が質問の主旨です。

data = {<jsonの中身>} とした時点でそれはもう有効な JSON ではないので、json.dump() では出力できないです。

そのかわりに、先に json.dumps() で JSON 部分のテキストを作ってから、"data='{" + json.dumps(data) + "}" で必要なものをあとから追加し、ファイルに出力すればいいと思います。

python

1obj = { 2 "type": "FeatureCollection", 3 "crs": {"type": "name", "properties": {"name": "urn:ogc:def:crs:OGC:1.3:CRS84"}}, 4 "features": [ 5 { 6 "type": "Feature", 7 "properties": {}, 8 "geometry": { 9 "type": "MultiPoint", 10 "coordinates": [ 11 [138.7309, 35.3628], 12 [138.8079, 35.1983], 13 [139.0248, 35.2248], 14 ], 15 }, 16 }, 17 { 18 "type": "Feature", 19 "properties": {}, 20 "geometry": { 21 "type": "LineString", 22 "coordinates": [ 23 [138.7309, 35.3628], 24 [138.8079, 35.1983], 25 [139.0248, 35.2248], 26 ], 27 }, 28 }, 29 { 30 "type": "Feature", 31 "properties": {}, 32 "geometry": { 33 "type": "Polygon", 34 "coordinates": [ 35 [ 36 [138.7309, 35.3628], 37 [138.8079, 35.1983], 38 [139.0248, 35.2248], 39 [138.7309, 35.3628], 40 ] 41 ], 42 }, 43 }, 44 ], 45} 46 47output = "data='{" + json.dumps(obj) + "}" 48 49with open("output.txt", "w") as f: 50 f.write(output)

投稿2020/11/03 16:12

編集2020/11/03 16:13
tiitoi

総合スコア21956

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問