我想知道是否有一种有效的("canonical")方法来遍历具有JSON结构的字典。例如,我有一个字典,其中有一组字典,这些字典有时具有不相同的键。然后,我需要遍历这些字典并检查特定键是否具有特定值。例如:
for cell in cells
if cell["key1"]["key2"]["key3"] == true
# do stuff
end
end
问题是,有时单元格不会有"key1"或"key2"或者"key3",所以简单的get(cell, key1, false)不起作用。当然,我总是可以写一堆if语句,但我想知道是否有一种更聪明、更直接的方法来做到这一点。
定义您自己的操作符!
▷(d::Dict{K,V}, k::K2) where {K, V, K2<:K} = get(d, k, nothing)
▷(d::Dict{K,V}, k::Symbol) where {K, V} = get(d, k, d ▷ string(k))
▷(::Nothing, k::K2) where K2 = nothing
在我的代码中,Symbol
版本是为了方便。
现在让我们进行设置:
cellA = Dict("key1"=>Dict("key2"=>Dict("key3"=>true)))
cellBad = Dict("key1"=>Dict("keyBad"=>Dict("key3"=>true)))
让我们使用这个新的API:
julia> cellA ▷ :key1 ▷ :key2 ▷ :key3
true
julia> cellA ▷ :key1 ▷ :key2 ▷ :key3 == true
true
julia> cellBad ▷ :key1 ▷ :key2 ▷ :key3
julia> cellBad ▷ :key1 ▷ :key2 ▷ :key3 == true
false
请参阅用户定义中缀操作符
中的可用操作符列表及其优先级。