JSON数据转换总结(VIP典藏版)

目录

一、测试数据

二、Str、JSONObject、JSONArray等互转

三、数据遍历、不规则数据整理

四、JsonString转XML

五、XML转JsonString

六、json转map

七、map转xml


一、测试数据

private static String getJsonData() {
        return "{\n" +
                "    \"companyNo\": \"C001\",\n" +
                "    \"supplyNo\": \"S001\",\n" +
                "    \"orders\": [\n" +
                "        {\n" +
                "            \"orderNo\": \"aaa001\",\n" +
                "            \"orderType\": \"order001\",\n" +
                "            \"orderAmount\": \"100\",\n" +
                "            \"creatorDate\": \"20020505\",\n" +
                "            \"invoiceAmount\": \"500\",\n" +
                "            \"openItemAmount\": \"700\"\n" +
                "        },\n" +
                "        {\n" +
                "            \"orderNo\": \"ccc002\",\n" +
                "            \"orderType\": \"order002\",\n" +
                "            \"orderAmount\": \"600\",\n" +
                "            \"creatorDate\": \"20010506\",\n" +
                "            \"invoiceAmount\": \"123\",\n" +
                "            \"openItemAmount\": \"456\"\n" +
                "        }\n" +
                "    ]\n" +
                "}";
    }

二、Str、JSONObject、JSONArray等互转

private static void json2json(String reqString) {
        reqString = "".equals(reqString) ? null : reqString;
        //string转object对象
        JSONObject reqJson = JSONObject.parseObject(reqString);
        //获取对应字段
        String companyNo = reqJson.getString("companyNo");
        //JSONObject转JSONArray
        String orders = reqJson.getString("orders");
        JSONArray jsonArray = JSONArray.parseArray(orders);

        //jsonObject-json互转
        JSON json = reqJson.getObject("orders", JSON.class);
        String str = json.toJSONString();
        JSONObject jsonObject = JSONObject.parseObject(str);
        JSONArray jsonArray2 = JSONArray.parseArray(str);
        JSONArray dealArray = dealArray(jsonArray);
        System.out.println(reqJson);

    }

三、数据遍历、不规则数据整理

//遍历,处理不规则数据
    private static JSONArray dealArray(JSONArray array) {
        JSONArray array2 = new JSONArray();
        for (int i = 0; i < array.size(); i++) {
            JSONObject json = array.getJSONObject(i);
            JSONObject jsonObject = new JSONObject();
            for (String key : json.keySet()) {
                jsonObject.put(key, json.get(key).toString().trim());
            }
            array2.add(jsonObject);
        }
        return array2;
    }

四、JsonString转XML

    public static String toXml(Object obj) throws UnsupportedEncodingException {
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        JAXB.marshal(obj,outputStream);
        return outputStream.toString("utf8");
    }

五、XML转JsonString

    public static Object xmlToParam(String xml,Class<?> clazz) throws JAXBException {
        StringReader reader = new StringReader(xml);
        JAXBContext jaxbContext = JAXBContext.newInstance(clazz);
        Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
        return unmarshaller.unmarshal(reader);
    }

六、json转map

public static Map<String, Object> json2Map(String jsonStr) {
        Map<String, Object> map = new HashMap<>();
        ObjectMapper objectMapper = new ObjectMapper();
        if(jsonStr != null && !"".equals(jsonStr)){
            //最外层解析
            try {
                Map jsonObject = objectMapper.readValue(jsonStr, Map.class);
                for (Object k : jsonObject.keySet()) {
                    Object v = jsonObject.get(k);
                    //如果内层还是数组的话,继续解析
                    if (v instanceof ArrayList) {
                        List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
                        Iterator<Map> it = ((ArrayList) v).iterator();
                        while (it.hasNext()) {
                            Map json2 = it.next();
                            list.add(json2Map(objectMapper.writeValueAsString(json2)));
                        }
                        map.put(k.toString(), list);
                    } else {
                        map.put(k.toString(), v);
                    }
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
            return map;
        }else{
            return null;
        }
    }

七、map转xml

public static String jsonToXml(Object json, String rootKey) {
    Document document = DocumentHelper.createDocument();
    //设置根节点和命名空间
    QName qName = new QName(rootKey);
    //设置命令空间
    Element element = document.addElement(qName);
    document.setRootElement(element);

    ObjectMapper objectMapper = new ObjectMapper();
    try {
        JsonObject jsonObject = new JsonParser().parse(objectMapper.writeValueAsString(json)).getAsJsonObject();
        toXml(jsonObject, document.getRootElement(), null);
        return document.asXML();
    } catch (Exception e) {
        log.error(e.getMessage());
        throw new AppException(e.getMessage());
    }
}

private static Element toXml(JsonElement jsonElement, Element parentElement, String name) {
    if (jsonElement instanceof JsonArray) {
        //是json数据,需继续解析
        JsonArray sonJsonArray = (JsonArray)jsonElement;
        for (int i = 0; i < sonJsonArray.size(); i++) {
            JsonElement arrayElement = sonJsonArray.get(i);
            toXml(arrayElement, parentElement, name);
        }
    }else if (jsonElement instanceof JsonObject) {
        //说明是一个json对象字符串,需要继续解析
        JsonObject sonJsonObject = (JsonObject) jsonElement;
        Element currentElement = null;
        if (name != null) {
            currentElement = parentElement.addElement(name);
        }
        Set<Map.Entry<String, JsonElement>> set = sonJsonObject.entrySet();
        for (Map.Entry<String, JsonElement> s : set) {
            toXml(s.getValue(), currentElement != null ? currentElement : parentElement, s.getKey());
        }
    }else if (jsonElement.isJsonNull()){
        parentElement.addElement(name);
    }else {
        //说明是一个键值对的key,可以作为节点插入了
        addAttribute(parentElement, name, jsonElement.getAsString());
    }
    return parentElement;
}

private static void addAttribute(Element element, String name, String value) {
    //增加子节点,并为子节点赋值
    if (String.valueOf(name.charAt(0)).equals(StringPool.DASH)){

        // 参数前为 “-”符号的为节点属性 去除“-”符号并添加属性
        String key=name.substring(1);
        if (key.equals("xmlns")){
            Namespace namespace=new Namespace("",value);
            QName qName=new QName(element.getName(),namespace);
            element.setQName(qName);
        }else {
            element.addAttribute(key,value);
        }
    }else if (StringPool.HASH.equals(String.valueOf(name.charAt(0)))){
        element.addText(value);
    }else {
        Element el = element.addElement(name);
        el.addText(value);
    }
}

有用请点赞,养成良好习惯!

疑问交流鼓励请留言!

  • 3
    点赞
  • 1
    收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

慕白Lee

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值