Рекурсивный обход файла JSON с извлечением ВЫБРАННЫХ строк

Мне нужно рекурсивно пройтись по файлам JSON (публиковать ответы из API), извлекая строки, которые имеют ["text"] в качестве ключа{"text":"this is a string"}

Мне нужно начать анализировать источник, который имеет самую старую дату в метаданных, извлечь строки из этого источника, а затем перейти ко 2-му самому старому источнику и так далее. Файл JSON может быть плохо вложенным, и уровень, в котором находятся строки, может время от времени меняться.

Проблема: Есть много ключей с именем ["text"], и мне не нужны все они, мне нужны ТОЛЬКО те, которые имеют значения в виде строки. Лучше всего «text»: «string», в которой я нуждаюсь, ВСЕГДА в одном и том же объекте {}"type":"sentence", Смотрите изображение.

Что я спрашиваю

Измените 2-й код ниже, чтобы рекурсивно пройтись по файлу и извлечь ТОЛЬКО значения ["text"], когда они находятся в одном и том же объекте {} вместе с "типом": "предложением".

Ниже приведен фрагмент файла JSON (зеленым цветом выделен нужный мне текст и медатада, красным выделены те, которые мне не нужны):

Ссылка на полный образец JSON:http://pastebin.com/0NS5BiDk

Что я сделал до сих пор:

1) Самый простой способ: преобразовать файл json в строку и искать содержимое между двойными кавычками (""), потому что во всех ответах на сообщения json нужные мне "строки" являются единственными, которые находятся между двойными кавычками. Однако эта опция не позволяет мне заказывать ресурсы ранее, поэтому недостаточно хороша.

r1 = s.post(url2, data=payload1)
j = str(r1.json())

sentences_list = (re.findall(r'\"(.+?)\"', j))

numentries = 0
for sentences in sentences_list:
    numentries += 1
    print(sentences)
    print(numentries)

2) Умнее: рекурсивно пройтись по файлу JSON и извлечь значения ["text"]

def get_all(myjson, key):
    if type(myjson) is dict:
        for jsonkey in (myjson):
            if type(myjson[jsonkey]) in (list, dict):
                get_all(myjson[jsonkey], key)
            elif jsonkey == key:
                print (myjson[jsonkey])
    elif type(myjson) is list:
        for item in myjson:
            if type(item) in (list, dict):
                get_all(item, key)

print(get_all(r1.json(), "text"))

Он извлекает все значения, которые имеют ["text"] в качестве ключа. К сожалению, в этом файле есть другие вещи (которые мне не нужны) с ключом ["text"]. Поэтому он возвращает текст, который мне не нужен.

Пожалуйста, порекомендуйте.

ОБНОВИТЬ

Я написал 2 кода для сортировки списка объектов по определенному ключу. Первый сортирует по «тексту» xml. 2-й по значению «Состоящий из периода».

Первый из них работает, но некоторые из XML, даже если их больше, на самом деле содержат внутри документы старше, чем я ожидал.

Для 2-го кода формат 'Comprising period from' не согласован, а иногда значение вообще отсутствует. Второй также дает мне ошибку, но я не могу понять, почему -string indices must be integers.

# 1st code (it works but not ideal)

j=r1.json()

list = []
for row in j["tree"]["children"][0]["children"]:
    list.append(row)

newlist = sorted(list, key=lambda k: k['text'][-9:])
print(newlist)

# 2nd code I need something to expect missing values and to solve the
# list index error
list = []
for row in j["tree"]["children"][0]["children"]:
    list.append(row)

def date(key):
    return dparser.parse((' '.join(key.split(' ')[-3:])),fuzzy=True)

def order(list_to_order):
    try:
        return sorted(list_to_order,
                      key=lambda k: k[date(["metadata"][0]["value"])])
    except ValueError:
        return 0

print(order(list))

Ответы на вопрос(1)

Ваш ответ на вопрос