将带有虚线键的平面地图转换为分层json

时间:2017-01-18 13:28:29

标签: json groovy

我有一个带有虚线键值对的散列图(未排序),如

person.adress.street=Fakestreet
person.adress.nr=123
person.name=Mike
person.adress.city=Springfield

我想将其转换为有效的json结构,如:

{
   "person" : {
     "name" : "Mike",
     "adress" : {
       "street" : "Fakestreet",
       "nr" : 123,
       "city" : "Springfield"
      }
   }
}

我有一个图书馆或一些标准的groovy功能,或者我需要手工制作这样的东西吗?

2 个答案:

答案 0 :(得分:1)

好吧,实际上并没有像我想的那样用手工制作它。不确定是否有任何缺陷,但对于这种看起来很有效。

-

答案 1 :(得分:1)

您可以使用groovy.util.ConfigSlurper as per @cfrick's link

或缩短你手工制作的解决方案:

Closure nester

nester = { Map rslt, String key, val ->
  String[] keys = key.split( /\./, 2 )
  if( !rslt.containsKey( keys[ 0 ] ) ) rslt[ keys[ 0 ] ] = [:]
  if( 2 == keys.length ) nester rslt[ keys[ 0 ] ], keys[ 1 ], val
  else rslt[ key ] = val
  rslt
}

def d = [ 'person.name':'Mike', 'person.adress.street':'Fakestreet', 'person.adress.nr':123, 'person.adress.city':'Springfield', 'aaa':'bbb' ]

def tree = d.inject [:], nester.trampoline()

assert '{"person":{"name":"Mike","adress":{"street":"Fakestreet","nr":123,"city":"Springfield"}},"aaa":"bbb"}' == JsonOutput.toJson( tree )