Можно ли заказать объект JSON пар ключей-значений, когда ключи меняются, а значения - больше пар ключ-значение. - PullRequest
0 голосов
/ 26 апреля 2018

В python у меня возникают проблемы с выяснением того, как вывести объект JSON (выраженный ниже) в виде строки, в которой содержимое бейсбола упорядочено на основе «key1» (по убыванию).Когда я получаю JSON (из источников данных), он выводит игроков из строя.В конечном счете, мой код должен упорядочить игроков, а затем передать их следующей заказанной функции.Пожалуйста, предположите, что я не могу изменить формат JSON, чтобы иметь / иметь массивы, так как функция потребления не может справиться с этим (как это в настоящее время написано).

Пример JSON:

 {
    "DataSource1":{
        "Baseball":{
            "Sean":{
                "key1":"10",
            },
            "Gene":{
               "key1":"100",
            },
            "Alan":{
                "key1":"1",
            }
        }
    },
    "DataSource2":{
        "Baseball":{
            "Bob_Smith":{
                "key1":"1"
            },
            "Adam_Filmore":{
               "key1":"100"
            },
            "Joe_Allen":{
                "key1":"10"
            }
        }
    }
    "DataSource3":{
        "Baseball":{
            "Jake":{
                "key1":"10"
            },
            "Huck":{
                "key1":"1"
            },
            "Eric":{
               "key1":"100"
           }
        }
    }
}

Пример того, как я хотел бы, чтобы JSON вывел:

 {
    "DataSource1":{
        "Baseball":{
            "Alan":{
                "key1":"1",
            },
            "Sean":{
                "key1":"10",
            },
            "Gene":{
               "key1":"100",
           }
        }
    },
    "DataSource2":{
        "Baseball":{
            "Bob_Smith":{
                "key1":"1"
            },
            "Joe_Allen":{
                "key1":"10"
            },
            "Adam_Filmore":{
               "key1":"100"
            }
        }
    }
    "DataSource3":{
        "Baseball":{
            "Huck":{
                "key1":"1"
            },
            "Jake":{
                "key1":"10"
            },
            "Eric":{
               "key1":"100"
           }
        }
    }
}

1 Ответ

0 голосов
/ 26 апреля 2018

Используйте sorted(), чтобы установить необходимый порядок сортировки, затем сохраните результаты в collections.OrderedDict.

Попробуйте:

import json
from collections import OrderedDict

with open('data.json') as f:
    data = json.load(f)

for data_source in data:
    data[data_source]["Baseball"] = OrderedDict(
        sorted(data[data_source]["Baseball"].items(),
               key=lambda x: x[1]["key1"]))

with open('new_data.json', 'w') as f:
    json.dump(data, f, indent=4)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...