我正在尝试从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"}"
希望你能帮助我。
答案 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