xml转json,以及踩过的坑

通过Postman发送xml,通过后端解析为JSON

  • 通过Postman调用接口
    xml转json,以及踩过的坑_第1张图片
import org.json.JSONObject;
import org.json.XML;

@RequestMapping("/xmltojson")
public Result xmlToJson(@RequestBody String xml){
// 首先将String类型xml转换为json
JSONObject xmlToJson = null;
try {
    xmlToJson = XML.toJSONObject(xml);
    } catch (Exception e) {
        e.printStackTrace();
        return new Result("0", "解析失败,您上传的格式不正确");
    }
    // 将json类型转换为String
    String jsonTOStr = xmlToJson.toString();
    // 通过阿里巴巴依赖转换可以获取json中的参数
    com.alibaba.fastjson.JSONObject jsonParam = com.alibaba.fastjson.JSONObject.parseObject(jsonTOStr);
    // 获取参数
    String name = jsonParam.getString("name");
    String age = jsonParam.getString("age");
    String sex = jsonParam.getString("sex");
    // 获取json数组中的数据时有个坑,稍后说一下
    JSONArray items= jsonParam.getJSONArray("items");
}
  • json数据中的坑:传入数组只有1个的时候会报错,获取不到数组中的数据。
  • 原因是:当数组只1个的时候转换出来的json格式为
{"name":"我是时生","age":"23","sex":"男","item":{"partId":"CSDN","quantity":"10000"}}

当数组为两个以上时转换出的json格式为

{"name":"我是时生","age":"23","sex":"男","item":[{"partId":"CSDN","quantity":"10000"},{"partId":"掘金","quantity":"10000"}]}

细心点应该能看出来区别,数组只有1个的时候没有中括号,阿里的依赖转换无法识别,也就获取不到其中的数据了。

  • 解决方法:判断数组是否是一个,然后遍历json字符串,添加中括号"[ ]"
    // 去掉"JSONArray items= jsonParam.getJSONArray("items");"
    // 加上下面判断语句
    // 当json中产品明细只有一条时通过此方式加上中括号
    String item = jsonParam.get("items").toString();
    String substring = item.substring(0, 1);
    if (!"[".equals(substring)) {
        substring = "[" + item + "]";
    } else {
            substring = item;
    }
    JSONArray items = JSONArray.parseArray(substring);

你可能感兴趣的:(java,工具)