Напишите карту с ключом как int в json в scala, используя json4s

Я пытаюсь написать Map в ключе как int в строку json, но я не могу этого сделать:

import org.json4s._
import org.json4s.jackson.JsonMethods._
import org.json4s.JsonDSL._


object MyObject { 
  def main(args: Array[String]) {

  // Works fine
  //val myMap = Map("a" -> List(3,4), "b" -> List(7,8))

  // Does not work
    val myMap = Map(4 -> Map("a" -> 5))

    val jsonString = pretty(render(myMap))

    println(jsonString)

}

Я получаю следующую ошибку:

[error] /my_stuff/my_file.scala:14: overloaded method value render with alternatives:
[error]   (value: org.json4s.JValue)org.json4s.JValue <and>
[error]   (value: org.json4s.JValue)(implicit formats: org.json4s.Formats)org.json4s.JValue
[error]  cannot be applied to (scala.collection.immutable.Map[Int,scala.collection.immutable.Map[String,Int]])
[error]   val jsonString = pretty(render(myMap))
[error]                           ^
[error] one error found
[error] (compile:compileIncremental) Compilation failed

Я смутно понимаю сообщение об ошибке, похоже, что рендер ожидает JValue в качестве входных данных, и я его не предоставляю, но я тоже не первый случай, и код работает так, как я ожидаю.

Как записать такую ​​карту в строку json?

Правка: мой источник путаницы

Я в основном программист на питоне, и в питоне

In [1]: import json

In [2]: wrong = {2: 5}

In [3]: with open("wrong.json") as f:
   ...:     json.dump(wrong, f)

работает отлично, конечно, python упорядочивает 2.


person Akavall    schedule 15.05.2015    source источник


Ответы (1)


Думаю, это ожидаемый результат. Если вы посмотрите спецификацию json, вы увидите, что вам нужно использовать строки для имен элементов.

Поэтому я боюсь, что вам понадобится что-то вроде:

 val myMap = Map("4" -> Map("a" -> 5))
person Carlos Vilchez    schedule 15.05.2015