jfinal 有什么有效办法将固定格式的xml转成固定格式的json

<ResponseSet> 
  <params> 
    <entry> 
      <String>Count</String>  
      <String>1</String> 
    </entry> 
  </params>  
  <result>success</result>  
  <datalist> 
    <data> 
      <entry> 
        <string>VM_Id</string>  
        <string>VM264b80d21dc682d4254f8e</string> 
      </entry>  
      <entry> 
        <string>Execute_Time</string>  
        <string/> 
      </entry> 
    </data> 
  </datalist> 
</ResponseSet>

转成下面的前端需要的格式:有些可能需要转变,比如xml中的result 结果 需要转成 code:200, datalist  变成 data key 等等

{
    "code": 200,
    "msg": "success",
    "time": 1521538833,
    "data": {
        "count": 1,
        "list": [{
            "vm_id": "VM264b80d21dc682d4254f8e",
            "execute_time": ""
        }]
    }
}


评论区

小马奔腾

2019-01-23 09:45

已使用模板引擎搞定一切

JFinal

2019-01-23 10:09

@小马奔腾 具体怎么解决的? 编辑一下本贴子,分享一下啊

小马奔腾

2019-01-23 11:13

以下是我项目中的解决方法:
#define xml2Json(responseJson)
{
#set(result = responseJson["ResponseSet"]["result"].get(0))
#set(paramsInfo = responseJson["ResponseSet"]["params"])
#set(msg = "success")
#set(code = 200)
#@getCodeAndMsgJson(result, paramsInfo, msg, code)
#@getTimeJson()
#@getDataJson(paramsInfo)
}
#end

#define getCodeAndMsgJson(result, paramsInfo, msg, code)
#if(result?? && result != "success")
#set(msg = "fail")
#set(code = 500)
#for(i : paramsInfo.get(0)["entry"]??)
#set(failArr = i["String"])
#if(failArr?? && failArr.get(0) == "fail_info")
#set(msg = failArr.get(1)??)
#break
#else if(failArr?? && failArr.get(0) == "error_message")
#set(msg = failArr.get(1)??)
#break
#end
#end
#end
"code": #(code)
,"msg": "#(msg??"")"

#end

#define getDataJson(paramsInfo)
,"data": {
#for(i : paramsInfo)
###获取参数Count
#set(countArr = i["entry"].get(0)["String"])
#if(countArr?? && countArr.get(0) == "Count")
#set(count = countArr.get(1))
#break
#end
#end
#if(count??)
"count": #(count)
#end
#if(count ?? && count.toInt() > 0)
###遍历data参数内容
#for(i : responseJson["ResponseSet"]["datalist"].get(0)["data"] ??)
#if((for.index) == 0)
,"list" :
#end
[{
#for(j : i["entry"])
###注释:判断是否是第一次循环
#if((for.index) > 0)
,
#end
###一定有key值可能没有value值,所以这里进行转换判断
#set(key = j["string"].get(0))
#set(kvArr = j["string"])
#set(list = java.util.Arrays::asList(kvArr))
#for(i : list)
#if(i.size() == 2)
#set(value = j["string"].get(1))
#else
#set(value = "")
#end
#end
"#lower(key)" : "#(value)"
#end
}]
#end
#end
}
#end

#define getTimeJson()
,"time": "#nowDate()"
#end

JFinal

2019-01-23 11:21

@小马奔腾 如果你的 XML 数据已经转成了一个 Java bean 或者是一个 model , 用一下 Json.getJson().toJson(...) 就能搞定了

小马奔腾

2019-01-23 12:04

@JFinal 这个项目中的xml 转成json 字段啥的有些还和前端已有接口返回数据对接补上,需要转换啥的(原本项目流程:js-php-java接口 现在需要改成js-javaweb-java接口)

热门反馈

扫码入社