2017-06-04 75 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