亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

Ruby 使用 JSON

1. 什么是JSON

JSON(JavaScript Object Notation)是一種輕量級的數據交換格式。它使得人們很容易的進行閱讀和編寫。同時也方便了機器進行解析和生成。

JSON 一共有兩種數據結構:對象數組。

  • 對象:使用{}來表示,數據結構為:{key: value, key: value, ...}。key、value這種組合也被成為鍵值對。取值方式是使用對象["key"]。
  • 數組:使用[]來表示,數據結構為:["Andrew", "Alice", 8888, ...]。取值方式是使用索引獲取。

常見的 JSON 的例子:

{
  data: [
    {
       order_id: JD00229740498930-1, 
       created_at: "2020-05-01 10:04:10",
       expressages: [
          "您的快件已由本人簽收,感謝您使用京東物流,期待再次為您服務。",
          "您的快件正在派送中,請您準備簽收(快遞員:xxx,聯系電話:xxxx)",
          "您的快件已到達北京,共計4個包裹,為方便您簽收,我們將一次性為您派送,請注意查收",
          "打包完成",
          "掃描完成",
          "揀貨完成",
          "您的訂單已經打印完成"
       ]
    }
  ]
}

經驗:

JSON 和 XML 將會成為您在開發中讓前端獲取數據最常用的方式。

2. 使用 Ruby 來對 JSON 進行操作

2.1 安裝 json

開始之前,我們需要安裝名為 json 的 Gem 來操縱 JSON(最新版本的 Ruby 已安裝了這個 Gem)。

gem install json

2.2 解析JSON文件

首先,讓我們導入一個json到temp.json文件中。

echo "{
   \"Shandong\": [
      \"Jinan\",
      \"Qingdao\",
      \"Zibo\"
   ],  

   \"Guangdong\": [
      \"Guangzhou\",
      \"Shenzhen\",
      \"DongGuan\"
   ],  

   \"Liaoning\": [
      \"Shenyang\",
      \"Dalian\",
      \"Jinzhou\"
   ]   
}" > temp.json

查看這個 json 文件我們可以看到:

{
   "Shandong": [
      "Jinan",
      "Qingdao",
      "Zibo"
   ],  

   "Guangdong": [
      "Guangzhou",
      "Shenzhen",
      "DongGuan"
   ],  

   "Liaoning": [
      "Shenyang",
      "Dalian",
      "Jinzhou"
   ]   
}

在跟這個 json 同一目錄,我們創建一個 Ruby 的腳本文件,內容如下:

require 'json'
file = File.read('temp.json')
p JSON.parse(file)

# ---- 輸出結果 ----
{"Shandong"=>["Jinan", "Qingdao", "Zibo"], "Guangdong"=>["Guangzhou", "Shenzhen", "DongGuan"], "Liaoning"=>["Shenyang", "Dalian", "Jinzhou"]}

解釋:

可以看到結果被轉化為了一個 Ruby 能夠解析的哈希,我們通過哈希的取值方式可以獲取想要部分的值,比如Shandong對應的值我們可以這樣獲取到:

p JSON.parse(file)["Shandong"]

# ---- 輸出結果 ----
["Jinan", "Qingdao", "Zibo"]

2.3 生成 JSON 文件

現在讓我們將一個哈希轉換成 JSON 文件。

require 'json'
data = {
   Shandong: [
      "Jinan",
      "Qingdao",
      "Zibo"
   ],

   Guangdong: [
      "Guangzhou",
      "Shenzhen",
      "DongGuan"
   ],

   Liaoning: [
      "Shenyang",
      "Dalian",
      "Jinzhou"
   ]

}
f=File.new("temp2.json","w+")
f.puts(data.to_json)
f.close

運行完代碼后,我們可以在腳本所在目錄找到 temp2.json 的文件。格式為:

{:Shandong=>["Jinan", "Qingdao", "Zibo"], :Guangdong=>["Guangzhou", "Shenzhen", "DongGuan"], :Liaoning=>["Shenyang", "Dalian", "Jinzhou"]}

Tips:上述的方法生成的 JSON 都在一行,使用JSON.pretty_generate(data)可以讓 JSON 直接格式化。

f.puts(JSON.pretty_generate(data)) # 將倒數第二行進行替換

得到的文件被格式化:

{
  "Shandong": [
    "Jinan",
    "Qingdao",
    "Zibo"
  ],
  "Guangdong": [
    "Guangzhou",
    "Shenzhen",
    "DongGuan"
  ],
  "Liaoning": [
    "Shenyang",
    "Dalian",
    "Jinzhou"
  ]
}

3. 小結

本章節我們學習了什么是 JSON,使用Ruby來操作 JSON 需要先require 'json',解析需要使用JSON.parse,生成 JSON 需要使用to_json。