2017-06-21 49 views
0
class SearchSuggest(View): 
def get(self, request): 
    key_words = request.GET.get('s','') 
    re_datas = [] 
    if key_words: 
     s = JobType.search() 
     s = s.suggest('my_suggest', key_words, completion={ 
      "field":"suggest", "fuzzy":{ 
       "fuzziness":2 
      }, 
      "size": 10 
     }) 
     suggestions = s.execute_suggest() 
     for match in suggestions.my_suggest[0].options: 
      source = match._source 
      re_datas.append(str(source["job_name"])) 

    # return HttpResponse(json.dumps(re_datas), content_type="application/json") 
    return HttpResponse(json.dumps(re_datas), content_type="application/json") 
    # re_datas=list(re_datas) 

但结果:对象不是JSON序列化

the result here

那么如何才能解决这个问题?谢谢!我希望不是列表类型! 我希望浏览器中的视图是str而不是list.I'm试图解决它。

+0

这里的信息不够充分。什么是AttrList?它从何而来?什么是返回这些建议?你真的想要什么输出? –

+0

问问自己:[json](https://docs.python.org/3/library/json.html#json.JSONEncoder)应该如何序列化一个对象? – Melvyn

+0

你总是想要第一个数组项吗? 如果是这样 - 你可以使用:re_datas.append(str(source [“job_name”] [0])) – perry

回答

0

你可以尝试更换re_datas.append(source["job_name"])

re_datas.append(str(source["job_name"])) 

貌似从您的形象,re_datas应该基本上是一个字符串列表。

问题很可能是源[“job_name”]正在返回一个json不知道如何序列化的对象。如果您只需要此对象的字符串表示形式,请尝试使用str(source [“job_name”])获取它。

如果它更复杂,你将需要使你的类json可串行化 - 检查出How to make a class JSON serializable

+0

这种方式非常棒,我是新手程序员。可能有时候我不知道关键是什么problem.Thanks!但它没有反应我期望的方式,它反应了列表类型,就像上面那样。但是,谢谢! – ileadall42