LoginSignup
0
0

More than 5 years have passed since last update.

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

Last updated at Posted at 2019-02-11

目的

こちらで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にやらせよう

0
0
0

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
  3. You can use dark theme
What you can do with signing up
0
0