我读了很多关于将xml转换为JSON的帖子,但我没有找到适合我案例的解决方案。 我想向客户端发送转换为JSON的xml数据,然后用jquery解析它。
XML:
<mode name="name" >
<data dataname="STO" str="none">data</data>
<file dataname="FO" str="none">file</file>
<file dataname="STO" str="none">file</file>
<file dataname="STO" str="none">file</file>
<data dataname="FO" str="none">data</data>
<data dataname="STO" str="none">data</data>
<data dataname="FO" str="none">data</data>
</mode>
Groovy的:
def xmlTest = new XmlParser().parse(xmlFile)
def nodetest= xmlTest.mode.find {it.'@name' == 'name'}
def jsonObject = [ mode: mode.collect {
[ (it.name()): it.text() ]
} ]
def json = new groovy.json.JsonBuilder( jsonObject )
render(view: "myView", model: [json:json])
return
JQUERY:
var obj = $.parseJSON("${json}");
alert(obj);
我尝试使用此处描述的解决方案:Converting XML to JSON in Groovy 但我没有得到我的xml的所有结构,在客户端我有一个错误: “意外的标识符”
答案 0 :(得分:0)
哥们!
这工作正常,'Groovy Console'
,但至少没有“意外标识符”错误..
import groovy.json.*
def xml ='''<mode name="name" >
<data dataname="STO" str="none">ABC</data>
<file dataname="FO" str="none">DEF</file>
<file dataname="STO" str="none">GHI</file>
<file dataname="STO" str="none">JKL</file>
<data dataname="FO" str="none">MNO</data>
<data dataname="STO" str="none">PQR</data>
<data dataname="FO" str="none">STV</data>
</mode>'''.stripMargin()
def parsed = new XmlParser().parseText( xml )
// Deal with each node:
def handle
handle = { mode ->
if( mode instanceof String ) {
mode
}
else {
[ (mode.name()): mode.collect( handle ) ]
}
}
// Convert it to a Map containing a List of Maps
def jsonObject = [ (parsed.name()): parsed.collect { mode ->
[ (mode.name()): mode.collect( handle ) ]
} ]
// And dump it as Json
def json = new groovy.json.JsonBuilder( jsonObject )
print json
输出:
{"mode":[{"data":["ABC"]},{"file":["DEF"]},{"file":["GHI"]},{"file":["JKL"]}
,{"data":["MNO"]},{"data":["PQR"]},{"data":["STV"]}]}
完成!感谢Tim here非常好的工作!