Stanislav Jirak
Stanislav Jirak

Reputation: 853

How to access different keys within a json file?

I'm calling an API service which returns JSON (with Czech language values) that looks like:

{
    "model": "czech-morfflex-pdt-161115",
    "acknowledgements": [
        "http://ufal.mff.cuni.cz/morphodita#morphodita_acknowledgements",
        "http://ufal.mff.cuni.cz/morphodita/users-manual#czech-morfflex-pdt_acknowledgements"
    ],
    "result": [
        [
            {
                "token": "Děti",
                "analyses": [
                    {
                        "lemma": "dítě",
                        "tag": "POS=N|SubPOS=N|Gen=F|Num=P|Cas=1|Neg=A"
                    },
                    {
                        "lemma": "dítě",
                        "tag": "POS=N|SubPOS=N|Gen=F|Num=P|Cas=4|Neg=A"
                    },
                    {
                        "lemma": "dítě",
                        "tag": "POS=N|SubPOS=N|Gen=F|Num=P|Cas=5|Neg=A"
                    }
                ],
                "space": " "
            },
            ...

I want to return "lemma" value where "tag" values Cas=3

I tried:

import json
import os
import httpx

service_url = "http://lindat.mff.cuni.cz/services/morphodita/api"
output_format = "json"
model = "czech-morfflex"
text = "Děti pojedou k babičce Martě. Už se těší."

anal_service_url = "/".join([service_url, "analyze"])
params = {"output": output_format, "model": model, "data": text}
response = httpx.request("GET", anal_service_url, params=params)
response.raise_for_status()
response_dict = response.json()

result = response_dict.get("result")

print(type(result))

for res in result:
    for a in res:
        for b in a['analyses']:
            for case in b['tag'][4]:
                for i in [i for i,x in enumerate(case) if x == '3']:
                print(i) # print position

But I don't know how to access "lemma" if case=3.

Help would be appreciated.

Upvotes: 0

Views: 40

Answers (1)

Dan Nagle
Dan Nagle

Reputation: 5415

You can use an if statement to find the tag in the string:

case_tag = 'Cas=3'
for res_list in result:
    for res_list_elem in res_list:
        for item in res_list_elem['analyses']:
            if case_tag in item['tag']:
                print(item['lemma'])

Upvotes: 1

Related Questions