Scala / Play: анализ JSON в карту вместо JsObject

On Play Framework 'с домашней страницы они утверждают, что "JSON - гражданин первого класса ", Я еще не видел доказательства этого.

В моем проекте яЯ имею дело с некоторыми довольно сложными структурами JSON. Это просто очень простой пример:

{
    "key1": {
        "subkey1": {
            "k1": "value1"
            "k2": [
                "val1",
                "val2"
                "val3"
            ]
        }
    }
    "key2": [
        {
            "j1": "v1",
            "j2": "v2"
        },
        {
            "j1": "x1",
            "j2": "x2"
        }
    ]
}

Теперь я понимаю, что Play использует Джексона для анализа JSON. Я использую Джексона в своих проектах Java, и я бы сделал что-то простое, как это:

ObjectMapper mapper = new ObjectMapper();
Map obj = mapper.readValue(jsonString, Map.class);

Это было бы неплохо разобрать мой JSON в объект Map, который мне нужен - Map пар строк и объектов и позволил бы мне легко привести массив к.ArrayList

Тот же пример в Scala / Play будет выглядеть так:

val obj: JsValue = Json.parse(jsonString)

Это дает мне право собственностиJsObject тип что на самом деле не то, что ям после.

Мой вопрос: могу ли я проанализировать строку JSON в Scala / Play toMap вместоJsObject так же легко, как я бы сделал это на Java?

Дополнительный вопрос: есть ли причина, почемуJsObject используется вместоMap в Scala / Играть?

Мой стек: Play Framework 2.2.1 / Scala 2.10.3 / Java 8 64bit / Ubuntu 13.10 64bit

ОБНОВИТЬ: Я вижу, что Трэвис за ответ проголосовали, так что я думаю, что это имеет смысл для всех, но я все еще не понимаю, как это можно применить для решения моей проблемы. Скажем, у нас есть этот пример (jsonString):

[
    {
        "key1": "v1",
        "key2": "v2"
    },
    {
        "key1": "x1",
        "key2": "x2"
    }
]

Ну, в соответствии со всеми указаниями, я теперь должен вставить все те шаблоны, которые я в противном случае неt понять цель:

case class MyJson(key1: String, key2: String)
implicit val MyJsonReads = Json.reads[MyJson]
val result = Json.parse(jsonString).as[List[MyJson]]

Выглядит хорошо, а? Но подождите минуту, в массив добавляется еще один элемент, который полностью разрушает этот подход:

[
    {
        "key1": "v1",
        "key2": "v2"
    },
    {
        "key1": "x1",
        "key2": "x2"
    },
    {
        "key1": "y1",
        "key2": {
            "subkey1": "subval1",
            "subkey2": "subval2"
        }
    }
]

Третий элемент больше не соответствует моему определенному классу дел - I 'м снова на площади Я могу использовать такие и гораздо более сложные структуры JSON в Java каждый день, предлагает ли Scala, чтобы я упростил свои JSON, чтобы соответствовать им? "типа сейф " политика? Поправь меня, если яЯ не прав, но я думаю, что этот язык должен обслуживать данные, а не наоборот?

UPDATE2: Решением является использование модуля Джексона для Scala (пример в моем ответе).

Ответы на вопрос(5)

Ваш ответ на вопрос