AMcoder - javascript, python, java, html, php, sql

Վերադարձրեք json-ում ստեղների ուղու բոլոր արժեքները, երբ թիրախային բանալին ցանկում և ոչ ցանկում է

Ասենք, որ ես ունեմ այս json-ը.

   json_data = json.loads("""
{


    "result":{         
        "statistics": [
                        {
                            "name": "A1",
                            "year": 1994,
                            "award": "Y1"
                        },
                        {
                            "name": "X1",
                            "year": 1990,
                            "award": "Y55"
                        }
                    ],

         "isTrue": "yes"           
            }

}""")

Արդյո՞ք ճանապարհ կա բանալիների ուղու համար վերադարձնելու հարցումի մեջ հայտնաբերված բոլոր արժեքները:

Նկատի ունեցեք, որ json-ը կարող է փոխվել և ունենալ այլ կառուցվածք, բայց ուղիները միշտ կլինեն հատուկ json-ի համար: Այսպիսով, օրինակ, նման բան չի աշխատի, քանի որ ստեղները ամեն անգամ նույնը չեն, կոշտ կոդավորումը տարբերակ չէ.

json_root = json_data['result]['statistics']
json_result = [something['name'] for something in json_root]

Ակնկալվող Արդյունքը

Օրինակ:

Path = 'result/statistics/name'

The result could be a dict like this : {'name':['A1', 'A2']}

Path2 = 'result/isTrue'

The result : {'isTrue: ['Yes']}
21.05.2020

Պատասխանները:


1

Դուք կարող եք նման բան անել մի ֆունկցիայի հետ, որը ռեկուրսիվ կերպով կարդում է տվյալները և հետևում է տվյալ ճանապարհին համապատասխանող հանգույցներին։ Եթե ​​մենք հասնենք ցուցակին, մենք պարզապես հետևում ենք այդ ցուցակի բոլոր տարրերի ուղուն.

import json

def getAllValues(data, path):
    """Get all values from data that match the given path.
    """

    # If the key is not in the dictionary, no element could be found
    if path[0] not in data:
        return []
    else:
        # We arrived at the end of the path, add whatever is there
        if len(path) == 1:
            return [data[path[0]]]
        else:
            # If we have a list, we want to add the values for all elements in the list
            if type(data[path[0]]) is list:
                out = []
                for elem in data[path[0]]:
                    out += getAllValues(elem, path[1:])
                return out
            # If its not a list, we can just coninue on
            else:
                return getAllValues(data[path[0]], path[1:])

if __name__ == "__main__":
    data = {
        "result": {
            "statistics": [
                {
                    "name": "A1",
                    "year": 1994,
                    "award": "Y1"
                },
                {
                    "name": "X1",
                    "year": 1990,
                    "award": "Y55"
                }
            ],
            "isTrue": "yes"
        }
    }

    path = "result/statistics/name"
    print(getAllValues(data, path.split("/")))

Ես ստանում եմ հետևյալ արդյունքը.

['A1', 'X1']
21.05.2020
  • Դա այն պատճառով է, որ այնտեղ ճանապարհը պետք է լինի results/isTrue: results/statistics/isTrue գոյություն չունի 21.05.2020
  • Նոր նյութեր

    Օգտագործելով Fetch Vs Axios.Js-ը՝ HTTP հարցումներ կատարելու համար
    JavaScript-ը կարող է ցանցային հարցումներ ուղարկել սերվեր և բեռնել նոր տեղեկատվություն, երբ դա անհրաժեշտ լինի: Օրինակ, մենք կարող ենք օգտագործել ցանցային հարցումը պատվեր ներկայացնելու,..

    Տիրապետել հանգստության արվեստին. մշակողի ուղեցույց՝ ճնշման տակ ծաղկելու համար
    Տիրապետել հանգստության արվեստին. մշակողի ուղեցույց՝ ճնշման տակ ծաղկելու համար Ինչպե՞ս հանգստացնել ձեր միտքը և աշխատեցնել ձեր պրոցեսորը: Ինչպես մնալ հանգիստ և զարգանալ ճնշման տակ...

    Մեքենայի ուսուցում բանկային և ֆինանսների ոլորտում
    Բարդ, խելացի անվտանգության համակարգերը և հաճախորդների սպասարկման պարզեցված ծառայությունները բիզնեսի հաջողության բանալին են: Ֆինանսական հաստատությունները, մասնավորապես, պետք է առաջ մնան կորի..

    Ես AI-ին հարցրի կյանքի իմաստը, այն ինչ ասում էր, ցնցող էր:
    Այն պահից ի վեր, երբ ես իմացա Արհեստական ​​ինտելեկտի մասին, ես հիացած էի այն բանով, թե ինչպես է այն կարողանում հասկանալ մարդկային նորմալ տեքստը, և այն կարող է առաջացնել իր սեփական արձագանքը դրա..

    Ինչպես սովորել կոդավորումը Python-ում վագրի պես:
    Սովորելու համար ծրագրավորման նոր լեզու ընտրելը բարդ է: Անկախ նրանից, թե դուք սկսնակ եք, թե առաջադեմ, դա օգնում է իմանալ, թե ինչ թեմաներ պետք է սովորել: Ծրագրավորման լեզվի հիմունքները, դրա..

    C++-ի օրական բիթ(ե) | Ամենաերկար պալինդրոմային ենթաշարը
    C++ #198-ի ամենօրյա բիթ(ե), Ընդհանուր հարցազրույցի խնդիր. Ամենաերկար պալինդրոմային ենթատող: Այսօր մենք կանդրադառնանք հարցազրույցի ընդհանուր խնդրին. Ամենաերկար palindromic substring...

    Kydavra ICAReducer՝ ձեր տվյալների ծավալայինությունը նվազեցնելու համար
    Ի՞նչ է ICAReducer-ը: ICAReducer-ն աշխատում է հետևյալ կերպ. այն նվազեցնում է նրանց միջև բարձր փոխկապակցված հատկանիշները մինչև մեկ սյունակ: Բավականին նման է PCAreducer-ին, չնայած այն..