如何在python中从复杂的Json中提取数据

如何在python中从复杂的Json中提取数据,python,json,Python,Json,我试图在python中从JSON中提取特定数据,但如果不指定名称aby、adz、agn,就无法完成,因为数据数组非常大,我只发布了其中的一部分 例如,我想得到“order”为160的元素的“nethash”。这里最好的策略是什么 这是我的JSON: { "data": { "aby": { "info": { "algo": "scrypt", "bestPool": 11, "bestexchang

我试图在python中从JSON中提取特定数据,但如果不指定名称aby、adz、agn,就无法完成,因为数据数组非常大,我只发布了其中的一部分

例如,我想得到“order”为160的元素的“nethash”。这里最好的策略是什么

这是我的JSON:

{
"data": {
    "aby": {
        "info": {
            "algo": "scrypt",
            "bestPool": 11,
            "bestexchange": 4,
            "blocks": 1036520,
            "blocktime": 0,
            "coin": "aby",
            "coinsPerDay": "0.82148358090787920727",
            "diff": 4383.33555,
            "diffAlgo": "0.00753414531332241653",
            "hashAlgo": "0",
            "nethash": 66289.728291,
            "pos": "?",
            "priceBTC": "0.00000098",
            "priceUSD": "0.00917138879999999934",
            "reward": 200,
            "timestamp": "2018-05-10 08:51:02.782957",
            "type": "diff",
            "usdPerDay": "0.00753414531332241653",
            "value": "0.00753414531332241653",
            "workers": 757
        },
        "order": 109
    },
    "adz": {
        "info": {
            "algo": "x11",
            "bestPool": 10,
            "bestexchange": "None",
            "blocks": 422294,
            "blocktime": 0,
            "coin": "adz",
            "coinsPerDay": "0.15507838730965944896",
            "diff": 103774.174,
            "diffAlgo": "0.00310020305638486395",
            "hashAlgo": "0",
            "nethash": 612234.455356,
            "pos": "?",
            "priceBTC": "0.00000214",
            "priceUSD": "0.01999120000000000064",
            "reward": 40,
            "timestamp": "2018-05-10 08:51:02.782957",
            "type": "diff",
            "usdPerDay": "0.00310020305638486395",
            "value": "0.00310020305638486395",
            "workers": 265
        },
        "order": 160
    },
    "agn": {
        "info": {
            "algo": "neoscrypt",
            "bestPool": 10,
            "bestexchange": 5,
            "blocks": 58301,
            "blocktime": 0,
            "coin": "agn",
            "coinsPerDay": "51.22860596982359027152",
            "diff": 4.47654431,
            "diffAlgo": "1.47183776684280331892",
            "hashAlgo": "0",
            "nethash": 86.217988,
            "pos": "?",
            "priceBTC": "0.00000307",
            "priceUSD": "0.02873077919999999716",
            "reward": 6,
            "timestamp": "2018-05-10 08:51:02.782957",
            "type": "diff",
            "usdPerDay": "1.47183776684280331892",
            "value": "1.47183776684280331892",
            "workers": 417
        },
        "order": 61
    }
},
"message": "",
"status": "ok",
"timestamp": "Thu, 10 May 2018 08:51:07 GMT"

}最好的策略是由您定义:

您可以使用像这样的库,它使您能够以简单的方式在JSON中搜索。 只需导入库并构建对象树,然后键入要搜索的单词

您还可以构建自己的
函数
,以在json中进行搜索,例如:

obj = CustomJsonSearch(..{your data})
query = obj.return_value(search_id=168, retunr_params=['nethash'])
或者使用类似
并进行查询。

您可以迭代JSON的键,直到找到要搜索的内容:

data=json_data['data']
对于data.keys()中的i:
如果数据[i]['order']==160:
nethash=data[i]['info']['nethash']
编辑:下面是一些可能用于搜索多个值的代码,我已经测试过了,它可以工作,但不确定对于大型数据集它的效率有多高:

data=json_data['data']
搜索列表=[160,61]
nethash_dict={}
对于data.keys()中的i:
如果搜索列表中的数据[i]['order']:
nethash_dict[data[i]['order']]=data[i]['info']['nethash']

可能重复的:您已经尝试过什么?您是否已开始将json值设置为变量,然后处理该变量?这应该只需要2-3行。还有一件事,我需要每次运行这个FOR循环来获取每个订单吗?假设我想要'order'==61和'order'==160I,我用一些可能的代码更新了我的答案,用于搜索并将多个值提取到字典中。