- 浏览: 925136 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (322)
- Hibernate研究&源码 (27)
- Server (10)
- Coder碎语 (64)
- EnglishMulling (11)
- About XML (1)
- persistence (12)
- Core Java & OO (23)
- Java EE (6)
- JavaScript/JSON/Ajax/ext... (22)
- 我的读书笔记 (16)
- Source Codes Study (29)
- workFlow/jBPM (22)
- OFBiz: Open For Business (1)
- 项目积累 (21)
- srcStudy_acegi (1)
- Cache/Ehcache... (9)
- Java Test/JUnit.. (7)
- maven/ant (2)
- 设计模式 (1)
- SOA/cxf/ws-security (2)
- Android (4)
- 云计算/Hadoop (2)
- 加密/签名 (1)
- 正则表达式 (1)
- htmlparser (1)
- 操作系统 (5)
- DB (1)
最新评论
-
天使建站:
这里这篇文章更详细 还有完整的实例演示:js跳出循环 ...
jQuery中each的break和continue -
heshifk:
刚刚我也遇到同样的问题,然后就在纠结为什么不能直接使用brea ...
jQuery中each的break和continue -
masuweng:
不错写的.
集万千宠爱于一身的SessionImpl:get研究(四): Hibernate源码研究碎得(8) -
muzi131313:
这个老是忘,做一下笔记还是挺好的
jQuery中each的break和continue -
lg068:
data = data.replace("\n&qu ...
项目小经验: eval与回车符
在使用JSON时的一点麻烦事.
问题的是这样的,当用JSON传回数据在HTML上用时总有双(单)引号的问题,即把JSON里的数据赋给HTML里某一元素的value属性时JSON值里的双(单)引号与HTML本身的引号就混在一起了.鼓捣了半天也没搞定,真是郁闷.
下面是一个简化的例子.
<html>
<script Language="javascript">
//这个menuList是利用JSON从Java端传回的数据.
var menulist = {"MenuList":
[{"cMenuText":"Valentine's Day test","cMenuTypeID":1},
{"cMenuText":"User Request","cContentTypeID":8}]
};
</script>
<ul>
<script Language="javascript">
var strCheckBox;
for( i=0; i<menulist.MenuList.length; i++ ){
var menuWrapper = menulist.MenuList[i];
document.write("<li class='treeItem' id='db_cartridgeID_contentTypeID'>");
strCheckBox = "<input type='checkbox' value='' >"; // ..............(1)
document.write(strCheckBox+"</li>");
}
</script>
</ul>
</html>
麻烦事就是(1)处value的赋值.本来是想把menuList里的"cMenuText"和"cMenuTypeID"的值拼成一个字符串放到这里的,可拼的过程中总有引号出错的问题.
下面是我试过的几种途径:
1,直接在(1)处把menulist中相应数据拼出来.
即:value = 'menuWrapper.cMenuText+menuWrapper.cMenuTypeID'
这样处理后,用firebug看结果如下:
<li id="db_cartridgeID_contentTypeID" class="treeItem">
<input type="checkbox" value="menuWrapper.cMenuText+menuWrapper.cMenuTypeID"/>
</li>
这显然不对,浏览器根本就没有解析menuWrapper.cMenuText而直接把它当字符串放在这里.
2,在(1)处拼串时去掉单引号,即:
value = menuWrapper.cMenuText+menuWrapper.cMenuTypeID
结果与上面的一样:
<li id="db_cartridgeID_contentTypeID" class="treeItem">
<input type="checkbox" value="menuWrapper.cMenuText+menuWrapper.cMenuTypeID"/>
</li>
3,把(1)处的整个一句改为:
strCheckBox = "<input type='checkbox' value = "+menuWrapper.cMenuText+menuWrapper.cMenuTypeID + "/>";
这样比上面的两个好些,结果如下:
<li id="db_cartridgeID_contentTypeID" class="treeItem">
<input type="checkbox" test1="" day="" value="Valentine's"/>
</li>
到这里问题引出来了,也就是menuWrapper.cMenuText的值,也就是"Valentine's Day test"在浏览器里被拆开了,而这个拆的过程是以空格和单引号为delimitor,这样与HTML自身的单引号或空格就混了从而造成了HTML里有了test1和day这样的属性.
.............................
写到这里也渐渐清晰了,这个问题实际上与JSON一点关系都没有,问题的根本在于用JavaScript操作HTML时单(双)引号的问题.
问题的是这样的,当用JSON传回数据在HTML上用时总有双(单)引号的问题,即把JSON里的数据赋给HTML里某一元素的value属性时JSON值里的双(单)引号与HTML本身的引号就混在一起了.鼓捣了半天也没搞定,真是郁闷.
下面是一个简化的例子.
<html>
<script Language="javascript">
//这个menuList是利用JSON从Java端传回的数据.
var menulist = {"MenuList":
[{"cMenuText":"Valentine's Day test","cMenuTypeID":1},
{"cMenuText":"User Request","cContentTypeID":8}]
};
</script>
<ul>
<script Language="javascript">
var strCheckBox;
for( i=0; i<menulist.MenuList.length; i++ ){
var menuWrapper = menulist.MenuList[i];
document.write("<li class='treeItem' id='db_cartridgeID_contentTypeID'>");
strCheckBox = "<input type='checkbox' value='' >"; // ..............(1)
document.write(strCheckBox+"</li>");
}
</script>
</ul>
</html>
麻烦事就是(1)处value的赋值.本来是想把menuList里的"cMenuText"和"cMenuTypeID"的值拼成一个字符串放到这里的,可拼的过程中总有引号出错的问题.
下面是我试过的几种途径:
1,直接在(1)处把menulist中相应数据拼出来.
即:value = 'menuWrapper.cMenuText+menuWrapper.cMenuTypeID'
这样处理后,用firebug看结果如下:
<li id="db_cartridgeID_contentTypeID" class="treeItem">
<input type="checkbox" value="menuWrapper.cMenuText+menuWrapper.cMenuTypeID"/>
</li>
这显然不对,浏览器根本就没有解析menuWrapper.cMenuText而直接把它当字符串放在这里.
2,在(1)处拼串时去掉单引号,即:
value = menuWrapper.cMenuText+menuWrapper.cMenuTypeID
结果与上面的一样:
<li id="db_cartridgeID_contentTypeID" class="treeItem">
<input type="checkbox" value="menuWrapper.cMenuText+menuWrapper.cMenuTypeID"/>
</li>
3,把(1)处的整个一句改为:
strCheckBox = "<input type='checkbox' value = "+menuWrapper.cMenuText+menuWrapper.cMenuTypeID + "/>";
这样比上面的两个好些,结果如下:
<li id="db_cartridgeID_contentTypeID" class="treeItem">
<input type="checkbox" test1="" day="" value="Valentine's"/>
</li>
到这里问题引出来了,也就是menuWrapper.cMenuText的值,也就是"Valentine's Day test"在浏览器里被拆开了,而这个拆的过程是以空格和单引号为delimitor,这样与HTML自身的单引号或空格就混了从而造成了HTML里有了test1和day这样的属性.
.............................
写到这里也渐渐清晰了,这个问题实际上与JSON一点关系都没有,问题的根本在于用JavaScript操作HTML时单(双)引号的问题.
评论
4 楼
wangyu
2009-02-20
请问你的单(双)引号的问题怎么解决的呢? 我今天也遇到这个问题,能不能交流一下.
3 楼
rmn190
2008-03-27
myData = JSON.parse(text, function (key, value) {
return key.indexOf('date') >= 0 ? new Date(value) : value;
});
完全可以利用这个function来将引号进行转义处理嘛.
http://www.json.org/js.html
return key.indexOf('date') >= 0 ? new Date(value) : value;
});
完全可以利用这个function来将引号进行转义处理嘛.
http://www.json.org/js.html
2 楼
rmn190
2008-03-27
A string is a collection of zero or more Unicode characters, wrapped in double quotes, using backslash escapes(http://www.json.org/):
这里提到了"using backslash escapes",这样那个单双引号问题就可以解决了.
前一步想,是不是在JSON的各种语言支持里是否有这种自动转义的处理method呢?
这里提到了"using backslash escapes",这样那个单双引号问题就可以解决了.
前一步想,是不是在JSON的各种语言支持里是否有这种自动转义的处理method呢?
1 楼
rmn190
2008-03-27
var item = "<li><img src='../images/bullet_toggle_plus.png' width='18' height='18' class='expandImage' /><img class=folderImage src='../images/folder.png' /><span class='textHolder'>"+newNodeName+ "</span>"+ "<input type='checkbox' id = "+newNodeName+"_"+ "_box_menu class='categoryNodeSelector' value='"+ nodeValue +"'/>"+ newNodeOrder + " : " + newNodeStartDate + " - " + treatedNodeEndDate +"</li>"; var branches = $(item).appendTo("#cartridge");
发表评论
-
利用jQuery来反选Select
2010-11-01 14:36 3717以这样的代码为例, <selec ... -
jQuery中each的break和continue
2010-10-22 15:54 30686each实质上是一个for循环,那么能不能像 ... -
套在一个Table中的Div不能隐藏
2010-10-13 17:59 3927直接用图说话: 操作前: 操作 ... -
previousElementSibling还是previousSibling?
2010-09-10 17:54 7018FireFox(版本号:3.5.11)中不支持Ja ... -
隐藏Table中套的Table
2010-09-10 17:10 1302如图所示: 点了红框中的加号后,变成: 也 ... -
自己实现Table增加Row时的几个心得记录
2010-09-10 16:42 1497自己用jQuery搞了个Table增加Row的东东 ... -
由实现JavaScript中的Map想到的
2010-09-10 16:13 1539项目中要用到JavaScr ... -
jQuery跟prototype关于“$”的冲突解决总结
2010-07-21 09:01 1340问题描述: jQuery跟其它的JavaScri ... -
JavaScript与displayTag标签的合作 -- 操作表头(二)
2009-12-10 16:46 1600这一版是对JavaScript与displayTag标签的合作 ... -
用JavaScript操作displayTag表头操作
2009-03-22 09:13 2578直接了当一些, displayTag有个缺点:用它生 ... -
JSP中Radio button使用时的一点经验
2008-12-18 21:03 4827就一张图片,图片上包含了所有信息: -
JavaScript与displayTag标签的合作 -- 操作表头(续)
2008-10-24 12:21 1695上一篇里写了定位到目标表头与onmouseover的 ... -
JavaScript与displayTag标签的合作 -- 操作表头.
2008-10-23 19:04 4003这段时间在用displayTag, 它有很多好 ... -
自写的一个JavaScript小小工具
2008-07-18 10:03 1867由于项目需要,写了一个JavaScript的工具,专门来 ... -
对浏览器中的context menu的认识.
2008-06-22 18:02 2319对浏览器中的context menu的认识. 一 ... -
与JSON的第一次亲密接触
2008-06-21 14:58 6795字符串型的Date转化为JavaBean的问题终于解决了 ... -
用json时的一个问题
2008-06-19 14:11 9231假设有一个Person类, public class P ... -
JavaScript中实现工厂模式.
2008-06-17 08:42 3281JavaScript中实现工厂模式. 第一次亲 ... -
JSON,Ajax,Spring组合使用时的一个问题.
2008-03-27 13:32 3145工作中用到JSON,可当它与Ajax结合使用时有一个槛过不去了 ... -
You Used JavaScript to Write WHAT?
2008-03-26 10:47 1435You Used JavaScript to Write WH ...
相关推荐
- 安全性:在进行数据交换时,需要考虑防止XSS攻击,json-lib提供了相应的安全处理机制。 2. **struts2-json-plugin-2.1.8.1.jar**: - 插件集成:此插件使得Struts 2可以无缝集成JSON支持,无需额外的配置。 - ...
为了在Java中处理JSON数据,开发者通常会使用特定的库,如`net.sf.json`包,这是一个非常实用的JSON库,提供了丰富的功能来创建、解析和操作JSON对象。 `net.sf.json`库主要包含了两个核心类:`JSONObject`和`...
在Java开发中,处理JSON数据时通常会用到一些库,如`com.alibaba.fastjson.JSON` 和 `net.sf.json.JSONObject`。这两个库分别是阿里巴巴的Fastjson和Eclipse的Json-lib。 首先,我们来详细了解一下`...
在.NET开发领域,C#语言提供了多种方式来处理JSON数据,其中最受欢迎的库之一就是Newtonsoft.Json.dll。这个库由James Newton-King 开发,它为C#开发者提供了丰富的功能,便于序列化和反序列化JSON,使得JSON数据在...
使用JSON-C库时,首先需要在项目中包含头文件`#include <json/json.h>`,然后利用库提供的API,如`json_object_new_string()`创建一个JSON字符串,`json_object_get_string()`获取JSON对象中的字符串值,等等。...
这在处理前后端交互或者内部数据存储时非常有用。 2. **自动类型转换**:`net.sf.json`库可以自动识别并处理各种Java类型,如基本类型、自定义类、数组、集合等,使得JSON转换过程更为简单。 3. **JSON操作**:...
5. **在Linux上的使用**:在Linux系统中,JSON-C库可以被其他软件或服务调用,例如网络服务、数据分析工具等,以处理JSON格式的输入或输出。开发者可以通过链接到JSON-C库来集成JSON处理功能。 6. **版本0.12.1**:...
在标题中提到的"JSON(net.sf.json.JSONArray)需要的jar包",是指为了在Java项目中使用`net.sf.json.JSONArray`以及相关的JSON类,你需要引入特定的jar包。`net.sf.json.JSONArray`是开源项目Apache licensed Json-...
在这个例子中,我们使用`JSONObject.Parse`方法解析JSON字符串,并通过键来获取对应的值。注意类型转换,因为`JSONObject`中的值默认为`dynamic`类型,我们需要显式转换为实际类型。 此外,`com.force.json`还支持...
5. **高性能**:Newtonsoft.Json.dll在性能上进行了优化,处理大规模数据时仍能保持高效,减少了CPU和内存的消耗。 6. **灵活性**:库还支持自定义日期格式、忽略空值、忽略未知属性等多种选项,可以根据项目需求...
7. **注意事项**:在使用json-c库时,需要注意内存管理和异常处理,避免因JSON数据结构复杂而引发的内存泄漏或错误。同时,要确保输入的JSON数据格式正确,避免解析错误。 总之,json-c0.13.1Release.rar是一个针对...
在开发过程中,如果你遇到了 Json.NET 使用上的问题或者需要更详细的信息,可以查看 Newtonsoft.Json.xml 文件。如果你使用的是支持 XML 文档的 IDE,它会自动解析这个文件,为代码中的相关函数提供上下文帮助和文档...
java中使用JSON封装需要的json_simple jar包
然而,随着JSON支持成为JavaScript语言标准的一部分,现代浏览器都内置了`JSON.parse()`方法,这通常被认为更安全且推荐使用。例如: ```javascript var jsonString = '{"name":"John", "age":30, "city":"New York...
System.Json.dll和LitJson.dll是两个在开发过程中处理JSON数据时常见的库,尤其在Unity3d游戏引擎的C#环境中。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,广泛用于网络通信和数据存储,因为它...
在使用json-lib时,通常会涉及到以下几个关键概念: 1. **JsonArray**: 表示JSON数组,可以包含零个或多个JsonObject或其他Json元素。 2. **JsonObject**: 表示JSON对象,由键值对组成,键是字符串,值可以是各种...
导入后,JsonNet的相关类库将可供项目使用,例如`Newtonsoft.Json.Linq.JObject`和`Newtonsoft.Json.JsonConvert`等,这些类可以帮助开发者执行JSON序列化和反序列化。 总之,JsonNet.9.0.1.unitypackage.zip是一个...
cycle.js: This file contains two functions, JSON.decycle and JSON.retrocycle, which make it possible to encode cyclical structures and dags in JSON, and to then recover them. JSONPath is used to ...
在Action类中,定义返回JSON数据的方法,并在方法上添加相应的注解,这样当用户请求该Action时,服务器就会返回JSON格式的响应。 总结来说,Struts2 JSON Plugin 2.3.8是Struts2框架与JSON数据交换的重要桥梁,通过...