десериализовать ответ json, который ожидает словарь, но получает список - PullRequest
0 голосов
/ 26 октября 2011

Я пытаюсь десериализовать ответ от solr в json:

Это JSON:

"facet_counts":    {
 "facet_queries": {},
 "facet_fields": {"attraction":      [
   "Cape Winelands",
   2,
   "Col de Bonhomme",
   2,
   "Elephanta Caves",
   2,
   "Kruger National Park",
   2,
   "Manuel Antonio Park",
   2,
   "San Francisco Monastery",
   2,
   "Tafraoute",

В XML это будет:

    <lst name="facet_counts">
      <lst name="facet_queries"/>
           <lst name="facet_fields">
              <lst name="attraction">
              <int name="Cape Winelands">2</int>
              <int name="Col de Bonhomme">2</int>
              <int name="Elephanta Caves">2</int>
              <int name="Kruger National Park">2</int>

Как десериализовать JSON как словарь?

Проблема в том, что результат отформатирован как «Мыс Уайнлендс», 2 вместо «Мыс Уайнлендс»: 2

Это способ, которым solr возвращает его, я не могу это контролировать и предпочел бы использовать JSON вместо XML.

Кто-нибудь знает, как это сделать? Или столкнулся с этим?

Ответы [ 2 ]

0 голосов
/ 31 мая 2012

Строго говоря, о Solr, вы можете указать json.nl = map в параметрах запроса, который будет возвращать фасеты в парах имя-значение по мере необходимости.

0 голосов
/ 26 октября 2011
var data = {
    "facet_counts": {
        "facet_queries": {},
        "facet_fields": {
            "attraction": [
                "Cape Winelands",
                2,
                "Col de Bonhomme",
                2,
                "Elephanta Caves",
                2,
                "Kruger National Park",
                2,
                "Manuel Antonio Park",
                2,
                "San Francisco Monastery",
                2
            ]
        }
    }
};

function arr_to_dict(a) {
    var o = {}, i, len, p;
    for (i = 0, len = a.length; i < len; i +=1) {
        p = i%2?o[p]=a[i]:a[i];
    }
    return o;
}

arr_to_dict(data.facet_counts.facet_fields.attraction);
...