把字符串转化为json

阅读更多

把字符串转化为json

任务:

把字符串

{"name":"黄威","age":27,"address":"{\"district\":\"海淀区\",\"street\":\"回龙观西大街\",\"building\":\"通达园\"}","score":0}

转化为:

{"name":"黄威","age":27,"address":{"district":"海淀区","street":"回龙观西大街","building":"通达园"},"score":0}



代码:

    /***
     * 最大限度地当做json 字符串解析
* 方案:"[...]" 转为[...],并且其中的\"-->"
* "{...}" 转为{...},并且其中的\"-->"
* @param jsonStr * @return */ public static String toJson(String jsonStr) { if (ValueWidget.isNullOrEmpty(jsonStr)) { return null; } if (ValueWidget.isHTMLWebPage(jsonStr)) { return jsonStr; } if (!jsonStr.trim().startsWith("{")) { return jsonStr; } JSONObject jsonObject = null; try { jsonObject = JSONObject.parseObject(jsonStr); } catch (Exception e) { e.printStackTrace(); return jsonStr; } ParseJsonInfo parseJsonInfo = toJsonObjectRecursive(jsonObject); if (parseJsonInfo.isHasString()) { return jsonObject.toJSONString(); } return jsonStr; } /** * 最大限度地当做json 字符串解析
* 方案:"[...]" 转为[...],并且其中的\"-->"
> set = jsonObject.entrySet(); // boolean hasString=false; ParseJsonInfo parseJsonInfo = new ParseJsonInfo(); for (Map.Entry entry : set) { // System.out.println("key :" + entry.getKey()); Object val = entry.getValue(); String key = entry.getKey(); // System.out.println("value :" + val); if (val instanceof String) { String valString = (String) val; valString = valString.trim(); if (valString.contains(":") && valString.contains("\"")) {//判断是否是json字符串,比如{"username":"whuang"} // hasString=true; if (valString.startsWith("[")) {//"[...]"--数组 JSONArray jsonArray = JSONObject.parseArray(valString); parseArray(parseJsonInfo, jsonArray); jsonObject.put(key, jsonArray); } else {//--对象 ParseJsonInfo parseJsonInfoTmp = toJsonObjectRecursive(JSONObject.parseObject(valString)); jsonObject.put(key, parseJsonInfoTmp.getJsonObject()); } parseJsonInfo.setHasString(true); } } else if (val instanceof JSONObject) { ParseJsonInfo parseJsonInfoTmp = toJsonObjectRecursive((JSONObject) val); if (parseJsonInfoTmp.isHasString()) { parseJsonInfo.setHasString(true); } } // System.out.println("value type :" +(val instanceof String)); // String val2=JSONHWUtil.unescapeJava((String)val); // System.out.println("val2 :" + val2); } parseJsonInfo.setJsonObject(jsonObject); return parseJsonInfo; } public static void parseArray(ParseJsonInfo parseJsonInfoParent, JSONArray jsonArray) { int size = jsonArray.size(); for (int i = 0; i < size; i++) { Object object = jsonArray.get(i); if (object instanceof JSONObject) { ParseJsonInfo parseJsonInfoTmp = toJsonObjectRecursive((JSONObject) object); if (parseJsonInfoTmp.isHasString()) { parseJsonInfoParent.setHasString(true); jsonArray.set(i, parseJsonInfoTmp.getJsonObject()); } } } }

  依赖的库:

 
            com.alibaba
            fastjson
            1.2.6
        

 

完整代码 见附件中的com/io/hw/json/JSONHWUtil.java

 

  • 把字符串转化为json_第1张图片
  • 大小: 2.7 MB
  • io0007-0.0.1-SNAPSHOT-sources.jar (466.2 KB)
  • 下载次数: 2
  • 查看图片附件

你可能感兴趣的:(json,fastjson,反序列化)