2017-06-04 77 views
0

我試圖打印一個API調用的結果,它返回的JSON結果比較深。我正在用Python 2.7和Django 1.11來完成這個項目。在Django模板中解析和顯示嵌套的JSON

我有以下view.py功能:

def nlu_analysis(request): 
    if request.method == 'POST': 
    text2send = request.POST.get('text2send') 
    natural_language_understanding = NaturalLanguageUnderstandingV1(
     version='2017-02-27', 
     username='####', 
     password='####') 

    response = natural_language_understanding.analyze(
     text=text2send, 
     features=[features.Entities(), ..., features.SemanticRoles()]) 

    return render(request, 'watson_nlu/analysis.html', {'data': response}) 

當我在我的.html文件使用下面的模板代碼:

{% for k in data.keywords %} 
    <p>Text - {{ k.text }}</p> 
    <p>Relevance - {{ k.relevance }}</p> 
{% endfor %} 

解析和顯示JSON與一級嵌套像這樣:

'keywords': [{ 
    'relevance': 0.946673, 
    'text': 'eyes' 
}] 

一切都很好,它顯示'眼睛'和0.946673如預期。

我找不出適當的語法用於獲取到「憤怒」,「高興」等,結果,它們嵌套更深入像這樣:

{ 
'emotion': { 
    'document': { 
     'emotion': { 
      'anger': 0.195192, 
      'joy': 0.082313, 
      'sadness': 0.644314, 
      'fear': 0.207166, 
      'disgust': 0.103676 
     } 
    } 
} 

什麼是最有效的方法爲了達到這個目標?

這絕不是:

<p>Anger - {{ data['emotion.document.template.anger'] }}</p> 

提前新手的感謝和良好的朱朱對你有所幫助。

+0

@RajaSimon我試過,

憤怒 - {{data.emotion.document.template.anger}}

並沒有返回但'憤怒 - '。任何其他的想法。謝謝。 – sctoy

+0

是的。它返回,憤怒 - {u'document':{u'emotion':{u'anger':0.088841,u'joy':0.048228,u'sadness':0.115575,u'fear':0.078872,u'disgust' :0.33166}}} – sctoy

+0

@RajaSimon,哎呀!我是我的錯字。我在建議後逐層建立了呼叫,並意識到我在第三層中包含了錯字'模板'而不是'情緒'。現在工作。如果您想以解決方案而不是評論的形式輸入您的幫助,我會將其標記爲解決方案。謝謝。 – sctoy

回答

0

您可以通過訪問.字典的字典所以解決你的問題是data.emotion.document.template.anger

+0

由於JSON結構與原始文章相同,所以精確的語法應該是'data.emotion.document.emotion.anger',但解決方案完全解決了這個問題。謝謝。 – sctoy