从json获取属性

问题描述 投票:0回答:2

我试图从json对象获取特定属性。这是我的代码。

require 'json'

def print_f(json)
    json.map do |person|
        puts "\n#{person['name'] }, \n #{person['lastname']}"
    end.join
end

a = '{"JSON": {"name": "Fernando", "lastname": "Soto"}}'

obj = JSON.parse(a)['JSON']

text = ''
text += print_f(obj)
puts text

当我做:

puts obj.inspect

它返回:

"`{"name"=>"Fernando", "lastname"=>"Soto"}"

但是当我尝试运行它时,它会抛出一个错误:

Traceback (most recent call last):
        5: from t.rb:14:in `<main>'
        4: from t.rb:4:in `print_f'
        3: from t.rb:4:in `map'
        2: from t.rb:4:in `each'
        1: from t.rb:5:in `block in print_f'
t.rb:5:in `[]': no implicit conversion of String into Integer (TypeError)

希望您能够帮助我。

json ruby
2个回答
0
投票

由于您只访问单个记录,因此map不相关:

def print_f(json)
  puts "\n#{person['name'] }, \n #{person['lastname']}"
end

如果您确实要迭代它们,那么您需要将文档更改为:

a = '{"JSON": [ {"name": "Fernando", "lastname": "Soto"}} ]'

这是一个对象数组(哈希),所以map然后适用。

我注意到的另一件事是,如果你打算返回一个字符串puts是错误的方法。相反,你想要:

def print_f(json)
  "\n#{person['name'] }, \n #{person['lastname']}"
end

这是因为无论输入如何,puts总是返回nil


0
投票

这就是它的工作原理,以防其他人需要这个具体的例子,希望你发现这个例子很有用。特别感谢tadman。

require 'json'

def print_f(json)
    json
    json.map do |person|
        "\n#{person['name'] },\n #{person['lastname']}\n#{person['name2'] },\n #{person['lastname2']}"
    end.join
end

a = '{"key1": [{"name": "Fernando", "lastname": "Soto" ,"name2": "Luis", "lastname2": "Bautista"}]}'


obj = JSON.parse(a)['key1']

text = ''
text += print_f(obj)
print text

这就是结果。

Fernando,
 Soto
Luis,
 Bautista
© www.soinside.com 2019 - 2024. All rights reserved.