这两天处理模块的联调工作,在json与XML转换中出现了一些奇怪的问题,仔细究来,实为对org.json.*包知之太少。
晚上baidu、google一下,找出了问题出现的原因。
在模块中,使用了两个方法,xml2Json()和json2Xml(),主要的问题就出在这两个方法的具体实现上。
XML与JSON相互转换的Java类在org.json.*包中常用的有XML.java和JSONML.java,前一半时间花在了json格式与XML生成
格式的验证上,json数据串格式没有错,只是在转换的时候需要在行尾添加“;”以表示结束。后一半时间花在格式的匹配
上,查阅XML.java和JSONML.java的API,JSONML的toString(JSONObject jo)方法有如下描述:
Reverse the JSONML transformation, making an XML text from a JSONObject. The
JSONObject must contain a "tagName" property. If it has children, then it must have a
"childNodes" property containing an array of objects. The other properties are attributes
with string values.
而XML.java的toString(Object o)方法描述如下:Convert a JSONObject into a well-formed, element-normal XML
string.它与JSONML的toString()方法相比,形式更通用化,可表示如:"BATCH_TYPE":{"type":"int","content":1}.
如果用JSONML类去处理,生成的json串为:{"childNodes":[1],"type":"int","tagName":"BATCH_TYPE"}。恰如JSONML的
toString所描述的:转换出的json对象必须包含tagName属性,他的子节点必须用childNodes形式表示,其它的属性用字符
串形式的值。
附:
//通过xml获取对应的json串,
private static String xml2Json(String xml)throws JSONException{
JSONObject job = JSONML.toJSONObject(xml);
String rs = job.toString();
return rs;
}
//将json串转换为xml,
private static String json2Xml(String jsonStr) throws JSONException{
JSONObject job = new JSONObject(jsonStr+";");
String jsonXML = (String)JSONML.toString(job);
return jsonXML;
}
应用版本(version)、平台版本(sdkversion) 、应用版本号(versioncode):注意区分这几个字段。应用版本是开发者提供给用户看的字串版本如2.1.2,而平台版本是应用程序支持的sdk api。应用版本号为一个整数,其值大于等于0.
资源包的md5码(packagemd5):只包含0-9,a-f字符,共32位。请确保位数正确,以及字母为小写
当出现中文时,需要使用<![CDATA[中文]]>,请注意不要丢失<>写成:![CDATA[中文]]