2017-06-21 51 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