把字符串轉化為json

JSON 黃威 技術 科技優家 2017-05-18

任務:

把字符串

轉化為:

{"name":"黃威","age":27,"address":{"district":"海淀區","street":"回龍觀西大街","building":"通達園"},"score":0}

代碼:

    /***
     * 最大限度地當做json 字符串解析<br />
     * 方案:"[...]" 轉為[...],並且其中的"-->"<br />
     * "{...}" 轉為{...},並且其中的"-->"<br />
     * @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 字符串解析<br />
     * 方案:"[...]" 轉為[...],並且其中的"-->"<br /
     *
     * @param jsonObject
     * @return
     */
    public static ParseJsonInfo toJsonObjectRecursive(JSONObject jsonObject) {
//        JSONObject jsonObject=JSONObject.parseObject(jsonStr);
        Set<Map.Entry<String, Object>> set = jsonObject.entrySet;
//        boolean hasString=false;
        ParseJsonInfo parseJsonInfo = new ParseJsonInfo;
        for (Map.Entry<String, Object> 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);
 }

 }
        }
    }

依賴的庫:

 <dependency>
 <groupId>com.alibaba</groupId>
 <artifactId>fastjson</artifactId>
 <version>1.2.6</version>
        </dependency>

完整代碼 見附件中的com/io/hw/json/JSONHWUtil.java

相關推薦

推薦中...