Json verisini filtrelemek

Merhabalar;
Epeyce kategori içeren bir json verisi var. 11 tane ana kategoriden oluşuyor ve ağaç şeklinde kategori altında kategori/kategoriler var. Yalnız bazı kategorilerin alt kategorileri yok. Alt kategorisi olmayan kategorilerin seçilmesi gerek. 3. parti bir modül ile ayıklayabildim ama daha kısa veya sağlıklı bir yöntem varmıdır; merak ediyorum.
Bilerek yazdığım kodları paylaşamıyorum. Çünkü algoritmayı düşünürken sürekli yazdığım kodlar aklınıza gelebilir. Bu da farklı düşünmenizi (bence) engeller.

Json verisi

Şimdiden cevaplarınız için teşekkür ederim :slight_smile:

def find_empty_subs(categ):
    # olası alt kategori listesini seçeriz
    sub_categs = categ["subCategories"]

    # alt kategori yoksa burada belli olur, yazdırabiliriz
    if not sub_categs:
        print(categ["name"])
        return

    # Her bir alt kategoriyi recursive olarak geziyoruz
    for cat in sub_categs:
        find_empty_subs(cat)

# Bütün ana kategorileri dolaşıyoruz
for main_categ in json_data["categories"]:
    find_empty_subs(main_categ)
2 Beğeni

Gerçekten harika! Kodlarınızı incelediğimde basit düşünmem gerektiğini anladım :smiley:

import ijson

def parser():
    with open("data.json", mode="r", encoding="utf-8") as json:
        parser = ijson.parse(json)
        prefixes = []
        for prefix, event, value in parser:
            if prefix.endswith(".subCategories") and not value:
                if prefix not in prefixes:
                    prefixes.append(prefix)

        nullCategories = []
        for rank in range(len(prefixes)):
            json.seek(0)
            for nullCategory in ijson.items(json, prefixes[rank]):
                nullCategories.append(nullCategory)

        lists = [category for category in nullCategories if category]

        return sorted([x[0]["name"] for x in lists])

if __name__ == "__main__":
    for x in parser():
        print(x)
2 Beğeni
jq '.categories[] | recurse(.subCategories[]) | select(.subCategories == []) | .name'

?