как разобрать json, где ключ является переменной, используя scala play json reader? - PullRequest
0 голосов
/ 29 мая 2020

как я могу получить доступ к ключу i4x-IITB-CS101-problem-33e4aac93dc84f368c93b1d08fa984fc_2_1 и данным внутри этого ключа? Я никогда не видел пример json ридера, который описывает, как ридер работает, когда ключевой атрибут является переменной, такой как в примере ниже.

{
    "username": "batista",        
    "event_type": "problem_check",      
    "ip": "127.0.0.1",
    "event": {
        "submission": {
            "i4x-IITB-CS101-problem-33e4aac93dc84f368c93b1d08fa984fc_2_1": {
                "input_type": "choicegroup",
                "question": "",
                "response_type": "multiplechoiceresponse",
                "answer": "MenuInflater.inflate()",
                "variant": "",
                "correct": true
            }
        },
        "success": "correct",
        "grade": 1,
        "correct_map": {
            "i4x-IITB-CS101-problem-33e4aac93dc84f368c93b1d08fa984fc_2_1": {
                "hint": "",
                "hintmode": null,
                "correctness": "correct",
                "npoints": null,
                "msg": "",
                "queuestate": null
            }
        }

Ответы [ 2 ]

1 голос
/ 30 мая 2020

Вы можете десериализовать их как Map с помощью String ключей и значений, определенных классом, для которого вы написали читатель JSON. Play JSON включает встроенный считыватель для Map типов .

0 голосов
/ 29 мая 2020

Вы можете использовать итератор. Не знаю точную структуру вашего json и насколько она гибкая, но вы можете понять эту идею с помощью этого Java кода.

JsonNode events = jsonOutput.get("event");
for (Iterator<JsonNode> it = invoices.iterator(); it.hasNext(); ){
    // With this line you will get submission, success, grade and correct_map.
    JsonNode node = it.next();

    // if e.g. submission always has one element it is accessible through node.get(0),
    // you may also iterate through e.g. node.elements()
}
...