如何将小数点分隔的字符串转换为多维哈希?

时间:2014-12-27 23:47:37

标签: json scala dictionary

Morning StackOverflow,

今天我有一个有趣的问题,我很想知道将十进制分离的字符串转换为多维哈希的最佳方法是什么。

例如:

假设我有字符串some.settings.woo = bla

我希望得到像这样的结果

{
  "some": {
    "settings": {
      "woo": "bla"
    }
  }
}

但我不太确定如何有效地实现它

谢谢Liam

3 个答案:

答案 0 :(得分:2)

一种选择是使用Rapture's JsonBuffer。请注意,在Scala中可能有很多方法可以做JSON libraries are plentiful in the language。这只是我碰巧知道的一种方式,随意探索其他图书馆。

引用我链接到的github页面中的文档:

  

可以使用

创建空的JsonBuffer
val jb = JsonBuffer.empty
     

可以使用

等指令进行变异
jb.fruit.name = "apple"
jb.fruit.color = "green"
jb.fruit.varieties = List("cox")
     

导致

{
  "fruit": {
    "name": "apple",
    "color": "green",
    "varieties": ["cox"]
  }
}

有关详细信息,请参阅docs concerning mutable JSON representations

如果您输入的是字符串格式,那么您必须以某种方式对其进行评估。这是a Stackoverflow question on how to do this。但要小心,确保输入来自可靠来源。

答案 1 :(得分:1)

感谢Ryan和他的评论,我想起了类型安全的配置库,这使得它在公园里变得非常容易。它几乎是一个简单的双线程,例如

val conf = ConfigFactory.parseString("apache.port=80\nnginx.bind.port=443")
println(conf.root().render(ConfigRenderOptions.concise()))

返回以下JSON

{
  "apache": { 
    "port":80
  },
  "nginx": {
    "bind": {
      "port": 443
     }
   }
}

这使文件变得非常简单,谢谢Ryan!

图书馆链接:https://github.com/typesafehub/config

答案 2 :(得分:0)

最好的方法是使用经过良好测试的库,但您也可以考虑这个:

  val parts = "some.settings.woo = bla".split('.')   
  val json = parts.init
    .foldRight("{" + parts.last.replace("=", ":") + "}")("{" + _ + ":" + _ + "}")

  // {some:{settings:{woo : bla}}}