[PHP] 提升 json_encode() 資料可讀性

PHP 可藉由 json_encode()json_decode() 來編碼與解碼 JSON 格式的資料,在一般情況下不需要特別給予任何參數,但如果將 JSON 格式資料直接儲存的話,預設是儲存一行文,在不靠任何工具的前提下僅以肉眼辨識會顯得有點吃力。

$data = [
    '5b8e2e456106f8.12710761' => [
        'id' => '5b8e2e456106f8.12710761',
        'description' => '',
        'options' => [],
        'size' => 1243916,
        'create_at' => '2018-09-04 15:04:02'
    ]
];
echo json_encode($data);

 

輸出如下:

{"5b8e2e456106f8.12710761":{"id":"5b8e2e456106f8.12710761","description":"","options":[],"size":1243916,"create_at":"2018-09-04 15:04:02"}}

 

如果想要提升 JSON 格式資料的可讀性,只需要將 json_encode() 的第二個參數設為 JSON_PRETTY_PRINT 即可。

echo json_encode($data, JSON_PRETTY_PRINT);

 

輸出:

{
    "5b8e2e456106f8.12710761": {
        "id": "5b8e2e456106f8.12710761",
        "description": "",
        "options": [],
        "size": 1243916,
        "create_at": "2018-09-04 15:04:02"
    }
}

 

PHP 5.6.6 以上可選擇的參數共有 11 個,詳細說明可見 PHP 官網 

 

 

 
 

HTTPS 網頁出現「blocked mixed content in browser」

當瀏覽器連線到一個 HTTPS 網站,但是瀏覽器網址旁邊出現了不安全的警告訊息,或是有部分內容被隱藏,可能是因為頁面裡面引用了未加密的 HTTP 外部資源,例如:

  1. 腳本(<script> 標籤)
  2. 樣式表(<link> 標籤)
  3. 圖片(<img><figure> 標籤)

Read more “HTTPS 網頁出現「blocked mixed content in browser」”

[Python] 判斷是否有來自標準輸入的內容傳入

一個處理資料的 CLI command 一定會有資料輸入,而輸入來源可以是檔案,也可以是從標準輸入(Standard Input, STDIN)而來,若需要同時支援標準輸入與指定參數(檔案路徑),則需要判斷輸入來源為何。參數判斷的部分,若是使用 argparse  開發的話,則在呼叫 argparse.add_argument() 時就可以設定好參數,最後呼叫 argparse.parse_args() 時即可得知是否有參數輸入,那標準輸入要如何判斷?

Read more “[Python] 判斷是否有來自標準輸入的內容傳入”

[Python] 標準串流控制(STD-IN、STD-OUT、STD-ERR)

標準串流(Standard Streams)  是作業系統底層的一個資料交換機制,各個 process 處理資料時皆需要透過它進行輸入與輸出資料,舉凡讀取檔案、寫入檔案或鍵盤輸入等都是。在程式開發上雖然各種語言都已經把這層的處理給包裝起來,已經可以應付日常大部分的用途,但有些需求下還是需要直接操作標準串流才能達成(尤其是開發 CLI Utility)。

 

在 Python 操作標準串流

# 操作標準串流需要透過 sys package,在程式的開頭先 import 進來
import sys

# 讀取單行
sys.stdin.readline()

# 讀取多行
sys.stdin.readlines()

# 迴圈讀取
for line in sys.stdin:
    print(line)

# 將標準輸出從 console 轉到 stdout.log
fh_stdout = open('stdout.log', 'w')
sys.stdout = fh_stdout

# 輸出字串,但是不會在 console 顯示,而是被寫到 stdout.log 這個檔案
print('Test output to ./stdout.log')

# 將標準輸出從 console 轉到 stderr.log
fh_stderr = open('stderr.log', 'w')
sys.stderr = fh_stderr

# 使用 raise 拋出一個 RuntimeError,錯誤訊息會被寫入到 stderr.log
raise RuntimeError('test stderr')

References

30.1. sys — System-specific parameters and functions — Python 3.7.0 documentation
How do you read from stdin in Python? – Stack Overflow