Вывод JSON RABL не соответствует стандарту? Может это?
Итак, у меня есть очень простое представление rabl, которое будет поддерживать вывод для xml и json (curr.rabl):
collection @currencies => "currencies"
attributes :code, :name
Мой конфиг рабл:
Rabl.configure do |config|
config.include_json_root = false
config.include_child_root = false
config.xml_options = { :skip_types => true, :camelize => :lower }
config.include_xml_root = false
end
Вывод, который Rabl дает для XML и JSON:
XML:
<currencies>
<currency>
<code>AFN</code>
<name>Afghan Afghani</name>
</currency>
<currency>
<code>AFA</code>
<name>Afghanistan Afghani</name>
</currency>
</currencies>
JSON:
{
currencies: [
{
code: "AFN",
name: "Afghan Afghani"
},
{
code: "AFA",
name: "Afghanistan Afghani"
}]}
Для меня это не правильно. JSON должен выглядеть следующим образом в соответствии с тем, что я читал:
{
currencies: {currency: [
{
code: "AFN",
name: "Afghan Afghani"
},
{
code: "AFA",
name: "Afghanistan Afghani"
} ] }
}
Если я установлю config.include_child_root(/include_json_root) = true
тогда я получаю следующее (все еще не правильно)
{
currencies: [
{
currency: {
code: "AFN",
name: "Afghan Afghani"
}
},
{
currency: {
code: "AFA",
name: "Afghanistan Afghani"
} } ] }
Во-первых, я прав в своем предположении, что RABL выводит неправильный JSON? Во-вторых, есть ли способ заставить RABL делать то, что я хочу, для этого представления, а также для любого другого представления, которое может иметь много вложенных дочерних объектов?
2 ответа
Просто чтобы прояснить это определенно не стандартно:
{
currencies: {currency: [
{
code: "AFN",
name: "Afghan Afghani"
},
{
code: "AFA",
name: "Afghanistan Afghani"
} ] }
}
Обе формы, которые производит RABL, являются стандартными. Один без рута и один с. Это не имеет смысла, я никогда не видел, чтобы API действовал таким образом.
Я всегда использовал вторую форму того, что у вас есть выше:
{
currencies: [
{
currency: { ... },
},
{
currency: { ... }
}]
}
Если вы действительно хотите сделать это:
{
currencies: { currency: [ { ... }, { ... }] }
}
Я думаю, что вы можете установить для include_json_root значение false и использовать пользовательские узлы, но это может оказаться сложным.