Как использовать python фильтр json строку на основе ключа, который задан в виде массива? - PullRequest
0 голосов
/ 17 марта 2020

у меня ниже json строка:

a={"44":[
    {
       "16":{
          "unitData":[

          ],
          "unitHeader":{
             "t9u":"P3P34",
             "sum":"807",
          }
       }
    },
    {
       "16":{
          "unitData":[

          ],
          "unitHeader":{
             "t9u":"BFB",
             "sum":"8A",
          }
       }
        }
 ],
 "49":[
    {
       "16":{
          "unitData":[

          ],
          "unitHeader":{
             "t9u":"P3P34",
             "sum":"807",
          }
       }
    },
    {
       "17":{
          "unitData":[

          ],
          "unitHeader":{
             "t9u":"BFB",
             "sum":"8A",
          }
       }
    }
 ],
 "7":[
    {
       "16":{
          "unitData":[

          ],
          "unitHeader":{
             "t9u":"P3P34",
             "sum":"807",
          }
       }
    },
    {
       "6":{
          "unitData":[

          ],
          "unitHeader":{
             "t9u":"BFB",
             "sum":"0A",
          }
       }
    }
 ],
}

Ключ сверху json строка, полученная a.keys ():

dict_keys(['44', '49', '7'])

Как отфильтровать a, чтобы он оставался ключом от 44 и 49, только если указан массив ['44', '49'], ниже ожидаемый результат:

{"44":[
    {
       "16":{
          "unitData":[

          ],
          "unitHeader":{
             "t9u":"P3P34",
             "sum":"807",
          }
       }
    },
    {
       "16":{
          "unitData":[

          ],
          "unitHeader":{
             "t9u":"BFB",
             "sum":"8A",
          }
       }
        }
 ],
 "49":[
    {
       "16":{
          "unitData":[

          ],
          "unitHeader":{
             "t9u":"P3P34",
             "sum":"807",
          }
       }
    },
    {
       "17":{
          "unitData":[

          ],
          "unitHeader":{
             "t9u":"BFB",
             "sum":"8A",
          }
       }
    }
 ],
}

Ответы [ 2 ]

1 голос
/ 17 марта 2020

Если я вас правильно понимаю, вы хотите использовать dict понимание следующим образом:

import json

filtered_json = {key: value for key, value in a.items() if key in ('44', '49')}
json_str = json.dumps(filtered_json , indent=4)
print(json_str)

Вывод:

{
    "44": [
        {
            "16": {
                "unitData": [],
                "unitHeader": {
                    "t9u": "P3P34",
                    "sum": "807"
                }
            }
        },
        {
            "16": {
                "unitData": [],
                "unitHeader": {
                    "t9u": "BFB",
                    "sum": "8A"
                }
            }
        }
    ],
    "49": [
        {
            "16": {
                "unitData": [],
                "unitHeader": {
                    "t9u": "P3P34",
                    "sum": "807"
                }
            }
        },
        {
            "17": {
                "unitData": [],
                "unitHeader": {
                    "t9u": "BFB",
                    "sum": "8A"
                }
            }
        }
    ]
}
1 голос
/ 17 марта 2020

Попробуйте это ниже:

    a={"44":[
    {
       "16":{
          "unitData":[

          ],
          "unitHeader":{
             "t9u":"P3P34",
             "sum":"807",
          }
       }
    },
    {
       "16":{
          "unitData":[

          ],
          "unitHeader":{
             "t9u":"BFB",
             "sum":"8A",
          }
       }
        }
 ],
 "49":[
    {
       "16":{
          "unitData":[

          ],
          "unitHeader":{
             "t9u":"P3P34",
             "sum":"807",
          }
       }
    },
    {
       "17":{
          "unitData":[

          ],
          "unitHeader":{
             "t9u":"BFB",
             "sum":"8A",
          }
       }
    }
 ],
 "7":[
    {
       "16":{
          "unitData":[

          ],
          "unitHeader":{
             "t9u":"P3P34",
             "sum":"807",
          }
       }
    },
    {
       "6":{
          "unitData":[

          ],
          "unitHeader":{
             "t9u":"BFB",
             "sum":"0A",
          }
       }
    }
 ],
}

given_array = ['44', '49']
    for i in list(a.keys()):
        if i not in given_array:
            a.pop(i)
print(a)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...