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

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

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

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

Python

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

Q&A

解決済

1回答

2161閲覧

Jsonファイルの中身を統合するとき、データが空のファイルは飛ばして統合したいのですが。。

Masarukun

総合スコア15

JSON

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

Python

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

0グッド

0クリップ

投稿2019/05/29 06:06

申し訳ございません。おそらく初歩的な質問です。

Openposeという画像処理のソースを使って、人の動きを解析しようとしてます。出力はフレーム毎にJSONファイルで出てくるので統合しようとしてます。

Jsonの中身は色々あるのですが、"pose_keypoints_2d"のデータを抜き出すコードを書いているのですが、下記のようなエラーがでました。

IndexError Traceback (most recent call last)
<ipython-input-15-1b76292cda10> in <module>
2 with open(file_name) as f:
3 jsn_s = json.load(f)
----> 4 df_s = jsn_s['people'][0]["pose_keypoints_2d"]
5 print(df_s)
6

IndexError: list index out of range

Jsonファイルの中身をチェックすると、動画の前半は人が画像にいないためだと推測しました。空のファイルはif関数で飛ばすようなコードが良いのかな?と思ってますが、データの中身がないときの条件はどういう風に書いたらよいのでしょう?(文字列が無い→False とする?)

添付した元々のコードは人が最初からいる前提で作られたもので、途中から人が現れると動かなくて。。

6p-c0_000000000000_keypoints.json (人は映っていない)
6p-c0_000000000001_keypoints.json (人は映っていない)
6p-c0_000000000002_keypoints.json (人は映っていない)


6p-c0_000000000700_keypoints.json (人が映っている)
6p-c0_000000000701_keypoints.json (人が映っている)

<人が映っていないときのJsonファイルの中身例:データが空っぽ>
{"version":1.3,"people":[]}  

<人が映っているときのJsonファイルの中身例:たくさんデータあり>
{"version":1.3,"people":[{"person_id":[-1],"pose_keypoints_2d":[244.301,13.1095,0.841262,255.98,26.5888,0.926749,262.335,25.738,0.914681,264.112,47.3069,0.760424,262.322,61.7204,0.74454,248.821,26.584,0.895842,245.199,49.9938,0.796818,234.442,67.0829,0.892589,253.305,64.3705,0.76928,256.9,64.3667,0.760762,248.777,89.5744,0.808776,254.225,111.17,0.781717,247.915,64.3817,0.808745,246.975,93.1669,0.767021,247.925,119.23,0.913405,243.432,11.2712,0.533857,247.887,11.2835,0.937553,0,0,0,255.102,12.1937,0.910615,234.449,118.31,0.833322,236.211,119.3,0.789415,249.727,121.966,0.863557,240.706,112.042,0.396824,241.601,111.14,0.32025,256.063,112.097,0.613827],"face_keypoints_2d":[],"hand_left_keypoints_2d":[],"hand_right_keypoints_2d":[],"pose_keypoints_3d":[],"face_keypoints_3d":[],"hand_left_keypoints_3d":[],"hand_right_keypoints_3d":[]},{"person_id":[-1],"pose_keypoints_2d":[82.3504,9.46582,0.857862,82.3797,19.3792,0.942986,69.8021,19.3838,0.870842,69.7794,40.9972,0.844526,90.4669,39.2081,0.834407,93.1671,18.541,0.857345,98.5741,40.9829,0.783856,81.4529,41.017,0.592251,86.8627,62.5637,0.790018,77.8739,63.4723,0.760854,83.2676,96.8046,0.888459,88.6587,123.738,0.794038,94.9777,61.6849,0.80242,97.6554,95.8602,0.857453,101.28,122.852,0.7934,0,0,0,83.2894,2.28294,0.934449,0,0,0,88.6631,2.28801,0.803164,104.864,131.854,0.836709,110.235,128.255,0.784325,97.7133,125.547,0.783372,89.5378,130.954,0.75428,83.306,130.043,0.754168,89.593,125.53,0.723697],"face_keypoints_2d":[],"hand_left_keypoints_2d":[],"hand_right_keypoints_2d":[],"pose_keypoints_3d":[],"face_keypoints_3d":[],"hand_left_keypoints_3d":[],"hand_right_keypoints_3d":[]}]}

import os import glob import json %matplotlib notebook #フォルダ中のJsonファイルの数をカウント count = 0 for name in glob.glob('*.json'): count = count + 1 print(count) #必要なデータのみ統合する for file_name in ["6p-c0_{:012}_keypoints.json".format(i) for i in range(count)]: with open(file_name) as f: jsn_s = json.load(f) df_s = jsn_s['people'][0]["pose_keypoints_2d"] print(df_s)

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

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

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

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

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

guest

回答1

0

ベストアンサー

jsn_s['people'] が空リストかどうか判定できれば良いのですね。
シンプルにif文で捌いてやってはどうでしょうか。

Python

1persons = jsn_s['people'] 2if persons: 3 df_s = persons[0]["pose_keypoints_2d"] 4else: 5 df_s = お好きな値をどうぞ

投稿2019/05/29 06:11

LouiS0616

総合スコア35660

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問