MicroCMS

MicroCMSとは、APIベースのヘッドレスCMSです。日本製のため、デフォルトで日本語に対応しており、サポートも豊富。管理画面でも作成したコンテンツなどが見やすくシンプルで、APIの管理がしやすい点も特徴です。

JSON

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

Python

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

Q&A

解決済

1回答

2200閲覧

pythonで階層ありjsonファイルの作成方法を教えてください

fightman

総合スコア22

MicroCMS

MicroCMSとは、APIベースのヘッドレスCMSです。日本製のため、デフォルトで日本語に対応しており、サポートも豊富。管理画面でも作成したコンテンツなどが見やすくシンプルで、APIの管理がしやすい点も特徴です。

JSON

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

Python

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

0グッド

0クリップ

投稿2022/09/17 06:37

編集2022/09/17 10:29

PythonからMicroCMSにAPIでPUTしたいと考えています。
その際、繰り返しフィールドがあり、以下のようにJSONファイルが構成されています。

今回、"c_media_url":の部分をPUTもしくは全体をPOSTしたいのですが、Pythonでうまく以下のようにJSONデータを作成できません。
力技で作成しようとしても力不足のため作成できず、dictやデータフレームから変換しようとしてもうまくいきません。かれこれ2週間近くここでとまっております。
どなたかサンプルコードをご教示いただけると嬉しいです。。。
よろしくお願いいたします。

{ "contents": [ { "id": "ao", "createdAt": "2022-09-04T06:07:25.905Z", "updatedAt": "2022-09-12T04:58:47.230Z", "publishedAt": "2022-09-04T06:07:25.905Z", "revisedAt": "2022-09-12T04:58:47.230Z", "c_ttid": "angel_machine", "c_tname": "Angel_ao", "c_name": "あお@Angel", "c_twitterid": "149333338996166661", "c_prof": " 2022.3.21〜 @Angel にいますᵔ· ̫·ᵔ₎", "c_icon_url": "https://pbs.twimg.com/profile_images/152333338010150914/UOt-J9AJ_normal.jpg", "c_tcount": 261, "c_follow": 50, "c_follower": 56, "c_createdate": "2022-02-24T13:28:52.000Z", "c_media_url": [ { "fieldId": "media_url_rep", "media_url": "https://pbs.twimg.com/media/FcTfLq333AA24uM.jpg" }, { "fieldId": "media_url_rep", "media_url": "https://pbs.twimg.com/media/FcRuFL333AIOeTW.jpg" }, { "fieldId": "media_url_rep", "media_url": "https://pbs.twimg.com/media/EwkSZ333gAM7dlh.jpg" } ] },

2022/9/17 19:28追記
コメントとご指摘ありがとうございます。
作成依頼になってしまっていますね申し訳ありません。

できないことは、「階層をもったJSONファイルを作成できない」です。
具体的には1階層目のデータをTwitterAPIから取得しデータフレームに保管して、microcmsのデータベースにPOSTまではできました。"c_media_url"を除いた部分になります。

def cast_put(list_cast,image_url): dict1 = { "c_ttid": list_cast[0], "c_tname": list_cast[1], "c_name": list_cast[2], "c_twitterid": list_cast[3], "c_prof": list_cast[4], "c_icon_url": list_cast[5], "c_tcount": list_cast[6], "c_follow": list_cast[7], "c_follower": list_cast[8], "c_createdate": list_cast[9], #"c_media_url": [{"fieldId":"media_url_rep","media_url":image_url[0]"}] } print(dict1) url = "https://xxxxxx.microcms.io/api/v1/cast/" + list_cast[1] print(url) try: status_code, result = request_put(url, dict1) except Exception as e: raise e df_cast.apply(cast_put,axis=1)

※df_castには、別途TwitterAPIから取得したデータが入っています。

ここに、別途TwitterIDごとに取得した複数の画像URLを繰り返しフィールドで保管したく、それのが"c_media_url"となります。"c_media_url"の内容は、TwitterAPIにて別途データフレームに保管するところまではできました。

この"c_media_url"の内容をPUTもしくはPOSTしたい、というのが今回の趣旨なのですが、最初の投稿のようなJSONデータを作成して、POSTできたらと考えていました。
または、"c_media_url”のJSONデータをデータフレームから作成し、PUTでも可能なのかなと考えていました。

しかし、今回初めてJSONデータを作成しようとしているため、そもそも"c_media_url"の部分の作り方がわかりません(データはデータフレームにあります)

こちらでわかりますでしょうか・・・

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

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

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

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

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

meg_

2022/09/17 06:51

> Pythonでうまく以下のようにJSONデータを作成できません。 > どなたかサンプルコードをご教示いただけると嬉しいです。。。 質問者さんが作成されているコードとその結果を提示いただかないと「コードの作成依頼」の印象が強くなってしまうかと思います。
TakaiY

2022/09/17 07:09

上のコメントもそのとおりですし、何ができなくて止っているのかわかりません。 "c_media_url"の値のリストが無いものであればできるのであれば、そこまでのコードを提示いただけますか。 あと、"c_media_url"を生成するための情報はどのような形になっていますか。
fightman

2022/09/17 10:10

コメントとご指摘ありがとうございます。 作成依頼になってしまっていますね申し訳ありません。 できないことは、「階層をもったJSONファイルを作成できない」です。 具体的には1階層目のデータをTwitterAPIから取得しデータフレームに保管して、microcmsのデータベースにPOSTまではできました。"c_media_url"を除いた部分になります。 def cast_put(list_cast,image_url): dict1 = { "c_ttid": list_cast[0], "c_tname": list_cast[1], "c_name": list_cast[2], "c_twitterid": list_cast[3], "c_prof": list_cast[4], "c_icon_url": list_cast[5], "c_tcount": list_cast[6], "c_follow": list_cast[7], "c_follower": list_cast[8], "c_createdate": list_cast[9], #"c_media_url": [{"fieldId":"media_url_rep","media_url":image_url[0]"}] } print(dict1) url = "https://xxxxxx.microcms.io/api/v1/cast/" + list_cast[1] print(url) try: status_code, result = request_put(url, dict1) except Exception as e: raise e df_cast.apply(cast_put,axis=1) ※df_castには、別途TwitterAPIから取得したデータが入っています。 ここに、別途TwitterIDごとに取得した複数の画像URLを繰り返しフィールドで保管したく、それのが"c_media_url"となります。"c_media_url"の内容は、TwitterAPIにて別途データフレームに保管するところまではできました。 この"c_media_url"の内容をPUTもしくはPOSTしたい、というのが今回の趣旨なのですが、最初の投稿のようなJSONデータを作成して、POSTできたらと考えていました。 または、"c_media_url”のJSONデータをデータフレームから作成し、PUTでも可能なのかなと考えていました。 しかし、今回初めてJSONデータを作成しようとしているため、そもそも"c_media_url"の部分の作り方がわかりません(データはデータフレームにあります) こちらでわかりますでしょうか・・・
TakaiY

2022/09/17 10:39

回答は書いてみましたが、ところで、「データフレーム」ってどういう意味で使っていますか?
fightman

2022/09/18 03:07

ありがとうございます!! for文で作成するとうまくいくんですね。 ずっとdictやデータフレームや配列で作成しようとしていました。 これで前に進みそうです! データフレームはpandas.DataFrame という意味で使っていました。 データ分析でPythonはよく利用しているのですが、独学なので知識が偏っていまして… ありがとうございました!
TakaiY

2022/09/18 03:47

コードにpandas.DataFrameが一切出てこないのでどういうことかと思ってました。 ご存知かと思いますが、DataFrameは表形式のデータを効率的にあつかうための仕組みなので、今回のような、構造を持つデータを処理するには向きません。
guest

回答1

1

ベストアンサー

よく把握できていないのですが、

"c_media_url": [{"fieldId":"media_url_rep","media_url":image_url[0]"}]

この部分をリストにしたいということで、image_urlにリストでデータが入っているのであれば、

内包表記だと

python

1"c_media_url": [{"fieldId":"media_url_rep","media_url":f"{iurl}"} for iurl in image_url]

forループなら

python

1c_media_url_list = [] 2for iurl in image_url: 3 c_medio_url_list.append({"fieldId":"media_url_rep","media_url":f"{iurl}"}}

こんな感じでしょうか。

投稿2022/09/17 10:38

TakaiY

総合スコア14545

fightman👍を押しています

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.30%

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

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

質問する

関連した質問