2016-01-06 2 views
0

Попытки «синтаксического анализ/чтение» внешний файл .json на моей машинописной коде, но файл .json (который я не могу изменить) выглядит следующим образом:typeahead/фильтр/JSON разбор?

{"**cms_countries**": 
    [{"**cms_country**": 
[{"**countrydisplayname**":"Afghanistan"} 
,{"countrydisplayname":"Albania"} ,{"countrydisplayname":"Algeria"} 
... ... ... ,{"countrydisplayname":"Zimbabwe"} ] } ,{"TotalRecords": 
[ {"TotalRecords":"246"} ] } ] } 

Так что, я думаю, что моя проблема в том, чтобы знать, как для разбора/чтения/ассимилировать/включить/принять этот .json файл, имеющий cms_countries, cms_country, , а затем, мой countrydisplayname поле на нем. (Вы видели здесь дерево?)

Это мой код:

$(document).ready(function() { 

     var searchablePlaces = new Bloodhound({ 
     datumTokenizer     : Bloodhound.tokenizers.obj.whitespace("countrydisplayname"), 
     queryTokenizer     : Bloodhound.tokenizers.whitespace, 
     prefetch      : 'countries.json', 
     remote       : { 
      url        : 'countries/%QUERY.json', 
      wildcard      : '%QUERY', 
      filter       : function(response) { return response.cms_country; } 
      }, 
     limit       : 10 
     }); 

searchablePlaces.initialize(); 

     $('#remote .typeahead').typeahead(
     { 
     hint   : true, 
     highlight  : true, 
     minLength  : 2 
     }, 
     { 
     name   : 'countrydisplayname', 
     displayKey  : "countrydisplayname", 
     source   : searchablePlaces.ttAdapter() 
     }) 
}); 

Но, конечно, это не работает:

любой намек о том, как организовать свой фильтр ...? или как сделать, чтобы преодолеть свои nested .json оберток ....

ответ

0

ОК, у меня есть мой код работает в настоящее время:

$(window).load(function(){ 
    var movies = new Bloodhound({ 
     limit: 10, 
     datumTokenizer: function (d) { 
      return Bloodhound.tokenizers.whitespace(d.value); 
     }, 
     queryTokenizer: Bloodhound.tokenizers.whitespace, 
     prefetch: { 
      url: 'countries.json', 
      filter: function (movies) { 
       return $.map(movies.cms_countries[0].cms_country, function (paises) { 
        return {   
         value: paises.countrydisplayname 
        }; 
       }); 
      } 
     } 
    }); 

    // Initialize the Bloodhound suggestion engine 
    movies.initialize(); 

    // Instantiate the Typeahead UI 
    $('.typeahead').typeahead(
     { 
      hint: true, 
      highlight: true, 
      minLength: 1 
     }, 
     { 
     //displayKey: 'value', 
     displayKey: function (toto) { 
        return toto.value; 
       }, 
     source: movies.ttAdapter() 
    }); 
});