从json获取属性

时间:2018-03-02 00:53:07

标签: json ruby

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

public class ConfigureAutoMapper 
{
    public void Run()
    {
        var types = AssemblyHelpers.GetInternalAssemblies()
                                   .SelectMany(x => x.GetTypes())
                                   .Where(x => x.IsClass && !x.IsAbstract && !x.IsInterface && typeof(IMap).IsAssignableFrom(x))
                                   .ToList();


        RegisterStandardMappings(types);
        RegisterCustomMappings(types);
    }

    private static void RegisterStandardMappings(IEnumerable<Type> types)
    {
        foreach (Type type in types)
        {
            if(type.IsGenericType && typeof(IMapFrom<>).IsAssignableFrom(type))
            {
                AutoMapper.Mapper.Map(type.GetGenericArguments()[0], type);
            }
        }
    }

    private static void RegisterCustomMappings(IEnumerable<Type> types)
    {
        foreach (Type type in types)
        {
            if (typeof(ICustomMapFrom).IsAssignableFrom(type))
            {
                ICustomMapFrom map = (ICustomMapFrom)Activator.CreateInstance(type);
                var t = AutoMapper.Mapper.Configuration;

                map.Map(Mapper.Configuration);
            }
        }
    }
}

当我这样做时:

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"}"

希望你能帮助我。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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