

jsonファイルの中身が、

[code]

    {
      "version": 1.2,
      "people": [
        {
          "pose_keypoints_2d": [
            570.599,
            272.875,
            ...,
            292.453,
            0.616146
          ],
          "face_keypoints_2d": [
            416.352,
            227.967,
            ...,
            213.009,
            0.822855
          ],
          "hand_left_keypoints_2d": [],
          "hand_right_keypoints_2d": [],
          "pose_keypoints_3d": [],
          "face_keypoints_3d": [],
          "hand_left_keypoints_3d": [],
          "hand_right_keypoints_3d": []
        }
      ]
    }
    
[/code]

このような中身の時にface_keypoints_2d"を指定したいのですが、エラーになってしまいます。  
おそらく原因は一番最初の[と一番最後の]だとおもい、その部分を削除したら上手く読み込めました。  
なんとかこの部分を削除しないで中身を指定する方法はないでしょうか。


CC BY-SA 4.0
2019-01-07T02:17:48.223
51774
2019-01-07T04:42:27.750
2019-01-07T02:41:36.467
29826
31694
question
python python3 json
jsonファイルの中身の指定


エラーが `TypeError: list indices must be integers or slices, not str` であれば、  
一番最初の[と一番最後の]で"people"の中身が配列になっているのに、配列としてアクセスしていないことが原因と予想されます。

下記のサンプルコードでjsonを書き換えずに"face_keypoints_2d"を取得できます。  
サンプルコードのprint文では`j["people"][0]["face_keypoints_2d"]`と記述して、"people"配列の先頭にアクセスしています。

[code]

    import json
    # jsonの不要な項目は省略しています
    s = '''{"version":1.2,"people":[{"pose_keypoints_2d":[570.599,272.875,0.719388,0.616146],
    "face_keypoints_2d":[416.352,227.967,0.822855],
    "hand_right_keypoints_3d":[]}]}'''
    j = json.loads(s)
    print(j["people"][0]["face_keypoints_2d"])
    # [416.352, ...] が出力される
    
[/code]

* * *

**コメントでの追加質問について**

ファイル読み込み時には[類似質問](https://ja.stackoverflow.com/q/51764)の回答を参考にして`json.loads`を`json.load`に読み替えてください。  
`json.loads`は _json文字列_ を、`json.load`は _ファイルパス_ をそれぞれ引数として受け取ります。

`read_data = f.read()`として`read`を使うと`read_data`には文字列(string)型が入ります。  
json型でなくstring型に対して`read_data['people']`の記述をすると下記の例外が発生します。

> TypeError: string indices must be integers

ファイル読込時のサンプルコード:

[code]

    import json
    with open("test.json", "r") as f:
        j = json.load(f)
        print(j['people'][0]['face_keypoints_2d'])
    
[/code]

エラーを再現できるコードや具体的なエラーの内容を記述していただくと的確な回答を得やすいと思います。

コメントで質問を追加すると、質問がページ内に散在する上にコードのインデントも崩れて読みにくくなります。  
そしてコメントを受けた回答者以外は回答しにくい状況にもなりますので、追加質問は **質問文を編集** するか別の質問として **新規投稿**
することをお勧めします。


CC BY-SA 4.0
2019-01-07T02:42:24.990
51775
2019-01-07T04:42:27.750
2019-01-07T04:42:27.750
9820
9820
51774
answer