我試圖從嵌套JSON
使用密鑰獲取一個值。Ruby Json使用密鑰訪問嵌套元素
我JSON
結構如下:
如果我嘗試:
puts person_id["name"]
它做工精細,但這時如果我試圖讓手機值:
person_id.phone[0].["value"]
它不起作用。
我該如何正確訪問phone value
?特別是當primary
字段是true
?我試過this但沒有成功。提前致謝。
我試圖從嵌套JSON
使用密鑰獲取一個值。Ruby Json使用密鑰訪問嵌套元素
我JSON
結構如下:
如果我嘗試:
puts person_id["name"]
它做工精細,但這時如果我試圖讓手機值:
person_id.phone[0].["value"]
它不起作用。
我該如何正確訪問phone value
?特別是當primary
字段是true
?我試過this但沒有成功。提前致謝。
與唯一的問題你代碼是當您應該使用散列鍵訪問器["phone"]
時,您試圖使用點方法訪問器.phone
。
這是一個可以理解的錯誤。它會在Javascript中工作。
添加此功能實際上並不困難。 Ruby有OpenStruct
類,它是一個類似哈希的對象,可以自動添加點方法訪問器。你只需要require ostruct
,這是標準庫的一部分。
你可以告訴JSON.parse
自動所有哈希值轉換爲OpenStructs(source):
object = JSON.parse(json, object_class: OpenStruct)
或者你可以使用recursive-open-struct寶石:
RecursiveOpenStruct.new(nested_hash)
從外觀看,person_id
是一個散列,字符串鍵爲"name"
,"email"
和"phone"
。鍵"phone"
的值是一個數組,其中的每個元素都是帶有鍵"label"
,"value"
和"primary"
的散列。在這種情況下,你想要的是這樣的:
phone_array = person_id["phone"]
# => [ { "label" => "Work", ... }, ... ]
first_phone = phone_array[0]
# => { "label" => "Work", ... }
first_phone_value = first_phone["value"]
# => "+0109135008"
當然,你正在尋找一種方式,一條線要做到這一點,它看起來像這樣:
person_id["phone"][0]["value"]
# => "+0109135008"
謝謝喬丹。它真的有效。然後,我不需要做任何改變即可獲得活動手機,因爲當前手機將始終處於0級別。 再次感謝。 –
歡迎堆棧溢出。不要使用圖像來表示充當代碼輸入的數據。我們不能重複使用,必須輸入,這會立即關閉您的潛在幫助。此外,鏈接可能會破壞然後中斷,讓你的問題沒有意義。請閱讀「[問]」,包括鏈接的頁面和「[mcve]」。 –
@錫人解釋了爲什麼你不應該發佈代碼的圖像。我低估了你的問題,因爲你看到了他的評論,卻選擇了忽略他的建議。即使你選擇了答案,你也應該按照他的建議去做,因爲很多SO成員將來可能會閱讀你的問題。另外,請刪除破折號併爲哈希指定一個變量(例如,'hash = {...}'),以便讀者既可以剪切,粘貼也可以引用該變量而不必定義它。我將刪除你編輯的downvote。 –