小结:
1. 使用jquery获取json对象遇到的问题
由于自己对ajax用的还不熟练,之前都是拷贝别人的代码拿来用的,这次自己写的时候倒是碰到好多麻烦一一列举如下:
1.1 在$ 与ajax之间还需要有个点号,即 $.ajax({...... });
1.2 在返回值那里对于返回类型是text或是json格式时,不知道哪种使用eval,哪种使用 (.属性)来解析,正确方式如下
当返回类型是text时,使用eval解析,书写方式如下
var obj = eval("(" + data + ")") ;var title = obj.title;
当返回类型是json格式时,直接使用点号即可:
var title = data.title;
2. 在java程序中将对象转换为JSON格式遇到的问题
2.1 使用以下的代码将对象转换为json格式时会出现空的属性值显示出来了。
JSONObject json = JSONObject.fromObject(option);
2.2 使用以下的代码将对象转换为json格式时空的属性值就不会显示了。但是即使这样也会产生3中的顺序个问题。
String json = JSON.toJSONString(option);
3. java中将对象转换为json字符串时排列顺序问题
使用2.2的方法虽然转换的时候空的属性值不会出现了,但是排序顺序并不是按照对象加载的先后顺序来输出的。这个感觉比较奇怪。
网上查询了下,由于json是使用HashMap容器的,所以是无序的。所以网上找到别人的类的解决方法来重写了json的toString方法。
粘贴如下,供参考。
public static String format(Object object) { Gson gson = new GsonBuilder().setPrettyPrinting().disableHtmlEscaping().create(); JsonParser jp = new JsonParser(); JsonElement je = jp.parse(gson.toJson(object)); String prettyJsonString = gson.toJson(je); //简单处理function String[] lines = prettyJsonString.split("\n"); lines = replaceFunctionQuote(lines); StringBuilder stringBuilder = new StringBuilder(); for (String line : lines) { stringBuilder.append(line); } return stringBuilder.toString(); }
/** * 处理字符串中的function和(function(){})(),除{}中的代码外,其他地方不允许有空格 * * @param lines * @return */ public static String[] replaceFunctionQuote(String[] lines) { boolean function = false; boolean immediately = false; for (int i = 0; i < lines.length; i++) { String line = lines[i].trim(); if (!function && line.contains("\"function")) { function = true; line = line.replaceAll("\"function", "function"); } if (function && line.contains("}\"")) { function = false; line = line.replaceAll("\\}\"", "\\}"); } if (!immediately && line.contains("\"(function")) { immediately = true; line = line.replaceAll("\"\\(function", "\\(function"); } if (immediately && line.contains("})()\"")) { immediately = false; line = line.replaceAll("\\}\\)\\(\\)\"", "\\}\\)\\(\\)"); } lines[i] = line; } return lines; }
最后可以看看最终出来的效果图如下: