2017-09-21 81 views
0

一個函數使用輸出JSON,在顯示器中存在的文本的任何實體被提交了。實體輸出看起來像(示例):我如何索引變量JSON輸出

... 
"entities": [ 
     { 
      "end": 3, 
      "entity": "pet", 
      "extractor": "ner_crf", 
      "processors": [ 
       "ner_synonyms" 
      ], 
      "start": 0, 
      "value": "Pet" 
     }, 
     { 
      "end": 8, 
      "entity": "aquatic_facility", 
      "extractor": "ner_crf", 
      "start": 4, 
      "value": "pool" 
     }, 
     { 
      "end": 14, 
      "entity": "toiletries", 
      "extractor": "ner_crf", 
      "start": 9, 
      "value": "razor" 
     } 
    ], 
... 

我對value對象特別感興趣。我知道如何提取任何值['entities'][i]['value']。我想知道的是如何檢查某個鍵值對是否存在,例如"value": "pool"。我不知道他們的位置是什麼,因爲取決於文本輸入,並且如果文本中沒有實體"entities"將不會出現在JSON中。

+0

的結構'JSON'永遠是您發佈作爲一個例子,不一樣嗎? – kip

+0

一般結構是的,但是實體的數量及其順序是可變的 – hackerman

+0

您可以遍歷對象列表並檢查是否過濾掉數據 –

回答

1

您可以用列表解析做到這一點,像這樣。

pools = [x for x in jsondata['entities'] if x.get('value') == 'pool'] 
if pools: 
    print("pools found") 

我使用。獲得的原因(「值」),而不是[「值」]是爲了防止被升高keynotfound錯誤。

0

您可以使用JSON模塊將JSON字符串轉換爲Python數據類型。從這裏你可以迭代字典並檢查「值」鍵。

import json 

json_str = """ 
[ 
     { 
      "end": 3, 
      "entity": "pet", 
      "extractor": "ner_crf", 
      "processors": [ 
       "ner_synonyms" 
      ], 
      "start": 0, 
      "value": "Pet" 
     }, 
     { 
      "end": 8, 
      "entity": "aquatic_facility", 
      "extractor": "ner_crf", 
      "start": 4, 
      "value": "pool" 
     }, 
     { 
      "end": 14, 
      "entity": "toiletries", 
      "extractor": "ner_crf", 
      "start": 9, 
      "value": "razor" 
     } 
    ] 
""" 

data = json.loads(json_str) 

values = [] 

for record in data: 
    if "value" in record: 
     values.append(record["value"]) 

print(values) 
0

也許與filter()你可以檢查:

checkThis = ['foo', 'bar'] 
isThere = list(filter(lambda x: 'value' in x and x['value'] in checkThis, json['entities'])) 
if isThere: 
    print('Yes !') 
else: 
    print('No !')