search
LoginSignup
0

More than 3 years have passed since last update.

posted at

updated at

Windows 10 Pro x64 + Python3 で DLしたjsonファイルの処理を少し試してみる

目的

こちらでDLしたサンプルに対して少し試してみる
※自分用の確認メモ
※TODO:json.JSONDecoder,json.JSONEncoder,dump形式変換後の処理

サンプルコード

# Windows Add env PYTHONIOENCODING = UTF-8 & restart vscode

import json
import pprint

# json ファイルの読み込み:qiita.jsonは1行のファイル
with open('qiita.json', 'r', encoding='UTF-8') as f:
    jsonstr = json.load(f)

# jsonstr を JSON 形式の f へのストリームとして直列化する
with open('qiitadump.json', 'w', encoding='UTF-8') as f:
    json.dump(jsonstr, f)
# コメントアウトしないと以下の処理は一部動作しない

print(type(jsonstr))        # <class 'list'>
print(len(jsonstr))         # 35

# 各記事の構造は dict : DLしたデータは dict の list という構造
for i, contents in enumerate(jsonstr):
    print(type(contents))   # <class 'dict'>
    break

# 1記事の tag の表示
for i, contents in enumerate(jsonstr):
    for j, tex in enumerate(jsonstr[i]):
        print(str(j).rjust(2, '0'), tex)
    break
# 00 rendered_body
# 01 body
# 02 coediting
# 03 comments_count
# 04 created_at
# 05 group
# 06 id
# 07 likes_count
# 08 private
# 09 reactions_count
# 10 tags
# 11 title
# 12 updated_at
# 13 url
# 14 user
# 15 page_views_count

# 1記事分の tag と その内容
for i, contents in enumerate(jsonstr):
    for k, v in dict(contents[i]).items():
        print(k, v)
    break

# 1記事文のデータを整形して表示
for i, contents in enumerate(jsonstr):
    pprint.pprint(contents, width=20)
    break

Qiitaの投稿の構造(Docより抜粋)


ユーザからの投稿を表します。
・rendered_body
    HTML形式の本文
    Example: "Example"
    Type: string
・body
    Markdown形式の本文
    Example: "# Example"
    Type: string
・coediting
    この記事が共同更新状態かどうか (Qiita:Teamでのみ有効)
    Example: false
    Type: boolean
・comments_count
    この記事へのコメントの数
    Example: 100
    Type: integer
・created_at
    データが作成された日時
    Example: "2000-01-01T00:00:00+00:00"
    Type: string
    Format: date-time
・group
    Qiita:Teamのグループを表します。
・id
    記事の一意なID
    Example: "4bd431809afb1bb99e4f"
    Type: string
    Pattern: /^[0-9a-f]{20}$/
・likes_count
    この記事への「いいね!」の数(Qiitaでのみ有効)
    Example: 100
    Type: integer
・private
    限定共有状態かどうかを表すフラグ (Qiita:Teamでは無効)
    Example: false
    Type: boolean
・reactions_count
    絵文字リアクションの数(Qiita:Teamでのみ有効)
    Example: 100
    Type: integer
・tags
    記事に付いたタグ一覧
    Example: [{"name"=>"Ruby", "versions"=>["0.0.1"]}]
    Type: array
・title
    記事のタイトル
    Example: "Example title"
    Type: string
・updated_at
    データが最後に更新された日時
    Example: "2000-01-01T00:00:00+00:00"
    Type: string
    Format: date-time
・url
    記事のURL
    Example: "https://qiita.com/yaotti/items/4bd431809afb1bb99e4f"
    Type: string
・user
    Qiita上のユーザを表します。
・page_views_count
    閲覧数
    Example: 100
    Type: null, integer

参考にしたのは以下のサイト

Qiita API v2ドキュメント - Qiita:Developer
7.2.2. json による構造化されたデータの保存
json --- JSON エンコーダおよびデコーダ

参考書

退屈なことはPythonにやらせよう

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
0